一、map方法
- function fuzzyPlural(single) {
- var result = single.replace(/o/g, 'e');
- //replace也不會修改原來數組的值,這里打印[foot,goose,moose,kangaroo]
- //alert(single);
- //下面為新的數組添加了一個元素,但是我們看到在map的時候沒有對添加的元素進行處理,所以map調用的結果還是沒有變化:["feet", "geese", "meese", "kangareese"]
- //但是可以知道words結果已經變化了!
- //words[4]="metoo";
- //雖然下面通過修改length為3將數組截斷了,從而相當於刪除了第四個元素,但是map方法並不會檢測到這種變化,所以在map方法調用的結果數組長度還是為4,只是最后一個元素變成了空了!但是這種刪除會影響外層的words,使得他的長度變成了3!
- //但是在具體的fuzzyPlural只會調用三次!(通過alert(single)就可以知道,因為這里已經把數組截斷了,但是返回的數組長度還是4,一個為空!)
- words.length=3;
- if( single === 'kangaroo'){
- result += 'se';
- }
- return result;
- }
- var words = ["foot", "goose", "moose", "kangaroo"];
- alert(words.map(fuzzyPlural));
- //map方法不修改原數組的值,words經過map調用以后,還是沒有發生變化!
- alert(words);
- // ["feet", "geese", "meese", "kangareese"]
二、concat方法
- var num1 = [1, 2, 3];
- var num2 = [4, 5, 6];
- var num3 = [7, 8, 9,"c"];
- var nums = num1.concat(num2, num3);
- //為老數組添加一個元素,看新數組是否會發生變化
- //打印[1,2,3,4,5,6,7,8,9,c]
- alert(nums);
- num3[4]="xxxx";
- //發現新數組沒有發生變化
- alert(nums);
- //為num1添加一個元素
- num1[3]="cccc"
- //新數組也沒有發生變化!
- alert(nums);
note:對新數組的任何操作不會影響老數組,反之亦然!因為這個方法會創建當前數組的一個副本,然后將接受的參數添加到這個副本的末尾!所以互不影響!
三、slice方法
- // 使用slice方法從myCar中創建一個newCar.
- var myHonda = { color: "red", wheels: 4, engine: { cylinders: 4, size: 2.2 } };
- var myCar = [myHonda, 2, "cherry condition", "purchased 1997"];
- var newCar = myCar.slice(0, 2);
- // 輸出myCar, newCar,以及各自的myHonda對象引用的color屬性.
- print("myCar = " + myCar.toSource());
- print("newCar = " + newCar.toSource());
- print("myCar[0].color = " + myCar[0].color);
- print("newCar[0].color = " + newCar[0].color);
- // 改變myHonda對象的color屬性.
- myHonda.color = "purple";
- print("The new color of my Honda is " + myHonda.color);
- //輸出myCar, newCar中各自的myHonda對象引用的color屬性.
- print("myCar[0].color = " + myCar[0].color);
- print("newCar[0].color = " + newCar[0].color);
四、filter,forEach,some,every(只要有一個元素不滿足就會終止循環)等
ps:(簡單來說以下兩種更直觀:
有一個數組arr = [1, 2, 3, 4, 10]。
var str = new Array;
str = arr; //這個不是賦值,將數組arr的引用賦給str,所以改變str也會改變arr (js實際創建的str是一個對象);
正確賦值:
1、str = [].concat(arr);
或者:
str=arr.concat();
content用於連接多個數組:arr1.concat(arr2,arr3,。。。。)
2、str=arr.slice(0);
返回一個新數組,從0到最后。
(slice有兩個參數:xx.slice(start,end),返回數組xx下標從start到end的元素。若未定義end則返回start到結尾。)