一、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到结尾。)