ECMAScript5对数组的操作添加了许多方法,现在可能不实用,以后就会用到,现在先学习下。
1.forEach()方法
forEach()方法从头至尾遍历数组,为每个元素调用指定的函数(对数组本身进行操作)。如上所述传递的函数作为forEach()的第一个参数,指定的函数包括三个参数第一个为数组的元素,第二个为下标,第三个为数组本身,代码说话:
- var arr=[1,35,98,6];
- var sum=0;
- //计算数组的和
- arr.forEach(function(value){sum+=value;})
- console.log(sum);//140
- //给数组添加每个值加1
- var a= arr.forEach(function(value,i,a){a[i]=a[i]+1;})
- alert(arr);//2,36,99,7
- alert(a);//undefind
2.map()方法
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值, 注意:map()方法返回的是新数组,它不修改调用的数组。
- var arr=[1,35,98,6];
- //给数组每个数加3
- var b=arr.map(function(value){
- return value+3;
- });
- alert(arr);//1,35,98,6
- alert(b);//4,38,101,9
3.filter()方法
filter()方法返回的数组元素是调用数组的一个子集,传递的函数是用来判断的,该函数返回true或false,调用判定函数 就像forEach一样。如果返回值为true或可以转换为true的话,那么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中,其实就是对数组传入一个判定条件只要,然后对数组的每个元素判断,满足条件就添加到一个新数组,最后返回。代码说活:
- var arr=[1,35,98,6];
- var newArr=arr.filter(function(value){
- return value<50;
- });
- var newArr2=arr.filter(function(value){
- return value%3==0;
- });
- alert(newArr);//1,35,6
- alert(newArr2);//6
4.every()方法
every的意思是所有,所以every()方法是对数组的所有元素都满足某个条件,如果都满足返回true,否则返回false,所谓的条件就是传入的函数,同filter传入的函数一样。代码说话:
- var arr=[1,35,98,6];
- var isNotGreaterTen =arr.every(function(value){
- return value>10;
- });
- var isNotGreaterZero =arr.every(function(value){
- return value>0;
- });
- alert(isNotGreaterTen);//false
- alert(isNotGreaterZero);//true
注意:every()方法在判定函数第一返回false时就停止判断,返回false,如果判定函数返回true就继续往下判断。直至结束。在空数组上调用every()方法返回true.
5.some()方法
some()方法也是对数组的每个元素进行判断只要有一个元素满足条件,就返回true,否则就返回false,条件就是传入的函数,同every,filter方法,上代码:
- var arr=[1,35,98,6];
- var isExistGreaterTen=arr.some(function(value){
- return value>10;
- });
- var isExistLessZero=arr.some(function(value){
- return value<1;
- });
- alert(isExistGreaterTen);//true
- alert(isExistLessZero);//false
注意:some()方法在判定函数第一次返回true时就停止继续判断,返回true,如果是false就继续往下判断,直到结束。特殊情况在空数组上调用some()方法返回为false.
6.indexOf()方法和lastIndexOf()
indexOf()方法和lastIndexOf()类似于字符串操作中的indexOf()和lastIndexOf(),返回查找到的第一个元素的索引或者没有找到返回-1,indexOf()从头至尾搜索,lastIndexOf()则反向搜索,indexOf()和lastIndexOf()方法都接收两个参数,第一参数指定需要搜索的值,第二个参数是可选,指定起始位置的索引,如果省略这个参数,idnexOf()则从头开始,lastIndexOf()从尾部开始,这个参数也可以为负数,负数的情况类似于splice()方法。说了一大堆,来点代码吧,看起来更明显:
- var arr=[1,2,1,2,3,4,3,5,4];
- var index1=arr.indexOf(1);
- var index2=arr.indexOf(1,1);
- var index3=arr.indexOf(1,-3);
- var index4=arr.lastIndexOf(1);
- var index5=arr.lastIndexOf(1,4);
- var index6=arr.lastIndexOf(1,-3);
- console.log(index1);//0
- console.log(index2);//2
- console.log(index3);//-1
- console.log(index4);//2
- console.log(index5);//2
- console.log(index6);//2
7.reduce()和reduceRight()方法
先说reduce()方法吧,reduce()方法使用指定的函数将元素进行组合,生成单个值,reduce()需要两个参数,第一个参数是执行化简操作的函数,化简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回最后的值。第二个参数是累积结果的初始值。
化简函数里面的参数,第一个是累积结果,第一次调用函数时,第一个参数是一个初始值,它就是传给reduce()的第二个参数,化简函数的第二个参数是数组的第一个值,如果reduce()的第二个参数没有传入时,化简函数的第一个参数就是数组的第一个值,第二个参数就是数组的第二个值。看段代码吧,先传入reduce的第二个参数:
- var arr=[1,2,1,2,3,4,3,5,4];
- var i=1;
- var sum=arr.reduce(function(x,y){
- console.log('第'+i+'次x为:'+x);
- console.log('第'+i+'次y为:'+y);
- i++;
- return x+y;
- },0);
- console.log('总共执行'+i+'次');
- console.log('数组的和为'+sum);
- /*
- 第1次x为:0 第一次为reduce的第二个参数
- 第1次y为:1 数组的第一个数值
- 第2次x为:1 第一次返回的结果 也就是第一次的x+y的结果
- 第2次y为:2 数组的第二个值
- 第3次x为:3 第二次返回的结果
- 第3次y为:1 数组的第三个值
- 第4次x为:4 第三次返回的值
- 第4次y为:2 ...
- 第5次x为:6 ...
- 第5次y为:3
- 第6次x为:9
- 第6次y为:4
- 第7次x为:13
- 第7次y为:3
- 第8次x为:16
- 第8次y为:5
- 第9次x为:21
- 第9次y为:4
- 总共执行10次
- 数组的和为25
- */
下面省略reduce的第二个参数:
- var arr=[1,2,1,2,3,4,3,5,4];
- var i=1;
- var sum=arr.reduce(function(x,y){
- console.log('第'+i+'次x为:'+x);
- console.log('第'+i+'次y为:'+y);
- i++;
- return x+y;
- });
- console.log('总共执行'+i+'次');
- console.log('数组的和为'+sum);
- /*
- 第1次x为:1 数组的第一值
- 第1次y为:2 数组的第二个值
- 第2次x为:3 第一次的返回值 也就是第一次的x+y
- 第2次y为:1 数组的第三个值
- 第3次x为:4 ....
- 第3次y为:2
- 第4次x为:6
- 第4次y为:3
- 第5次x为:9
- 第5次y为:4
- 第6次x为:13
- 第6次y为:3
- 第7次x为:16
- 第7次y为:5
- 第8次x为:21
- 第8次y为:4
- 总共执行9次
- 数组的和为25
- */
reduceRight()和reduce()的工作原理一样,不同的是按照数组索引从高到低处理数组。这个就不用代码了。理解从高到低就行了。
8.isArray()方法
这个看名字就知道了。判定一个对象是否为数组。接收一个参数。就是要判断的对象。代码就不必了吧。。