现在的位置: 首页 > javascript > 正文
ECMAScript5数组操作
2013年04月07日 javascript ⁄ 共 3957字 暂无评论 ⁄ 被围观 2,326 views+

ECMAScript5对数组的操作添加了许多方法,现在可能不实用,以后就会用到,现在先学习下。
1.forEach()方法
forEach()方法从头至尾遍历数组,为每个元素调用指定的函数(对数组本身进行操作)。如上所述传递的函数作为forEach()的第一个参数,指定的函数包括三个参数第一个为数组的元素,第二个为下标,第三个为数组本身,代码说话:

  1. var arr=[1,35,98,6];   
  2. var sum=0;   
  3. //计算数组的和   
  4. arr.forEach(function(value){sum+=value;})   
  5. console.log(sum);//140   
  6. //给数组添加每个值加1   
  7. var a= arr.forEach(function(value,i,a){a[i]=a[i]+1;})   
  8. alert(arr);//2,36,99,7   
  9. alert(a);//undefind  

2.map()方法
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值, 注意:map()方法返回的是新数组,它不修改调用的数组

  1. var arr=[1,35,98,6];   
  2. //给数组每个数加3   
  3. var b=arr.map(function(value){   
  4.     return value+3;   
  5. });   
  6. alert(arr);//1,35,98,6   
  7. alert(b);//4,38,101,9  

3.filter()方法
filter()方法返回的数组元素是调用数组的一个子集,传递的函数是用来判断的,该函数返回true或false,调用判定函数 就像forEach一样。如果返回值为true或可以转换为true的话,那么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中,其实就是对数组传入一个判定条件只要,然后对数组的每个元素判断,满足条件就添加到一个新数组,最后返回。代码说活:

  1. var arr=[1,35,98,6];   
  2. var newArr=arr.filter(function(value){   
  3.     return value<50;   
  4. });   
  5. var newArr2=arr.filter(function(value){   
  6.     return value%3==0;   
  7. });   
  8. alert(newArr);//1,35,6   
  9. alert(newArr2);//6  

4.every()方法
every的意思是所有,所以every()方法是对数组的所有元素都满足某个条件,如果都满足返回true,否则返回false,所谓的条件就是传入的函数,同filter传入的函数一样。代码说话:

  1. var arr=[1,35,98,6];   
  2. var isNotGreaterTen =arr.every(function(value){   
  3.     return value>10;   
  4. });   
  5. var isNotGreaterZero =arr.every(function(value){   
  6.     return value>0;   
  7. });   
  8. alert(isNotGreaterTen);//false   
  9. alert(isNotGreaterZero);//true  

注意:every()方法在判定函数第一返回false时就停止判断,返回false,如果判定函数返回true就继续往下判断。直至结束。在空数组上调用every()方法返回true.
5.some()方法
some()方法也是对数组的每个元素进行判断只要有一个元素满足条件,就返回true,否则就返回false,条件就是传入的函数,同every,filter方法,上代码:

  1. var arr=[1,35,98,6];   
  2. var isExistGreaterTen=arr.some(function(value){   
  3.     return value>10;   
  4. });   
  5. var isExistLessZero=arr.some(function(value){   
  6.     return value<1;   
  7. });   
  8. alert(isExistGreaterTen);//true   
  9. alert(isExistLessZero);//false  

注意:some()方法在判定函数第一次返回true时就停止继续判断,返回true,如果是false就继续往下判断,直到结束。特殊情况在空数组上调用some()方法返回为false.
6.indexOf()方法和lastIndexOf()
indexOf()方法和lastIndexOf()类似于字符串操作中的indexOf()和lastIndexOf(),返回查找到的第一个元素的索引或者没有找到返回-1,indexOf()从头至尾搜索,lastIndexOf()则反向搜索,indexOf()和lastIndexOf()方法都接收两个参数,第一参数指定需要搜索的值,第二个参数是可选,指定起始位置的索引,如果省略这个参数,idnexOf()则从头开始,lastIndexOf()从尾部开始,这个参数也可以为负数,负数的情况类似于splice()方法。说了一大堆,来点代码吧,看起来更明显:

  1. var arr=[1,2,1,2,3,4,3,5,4];   
  2. var index1=arr.indexOf(1);   
  3. var index2=arr.indexOf(1,1);   
  4. var index3=arr.indexOf(1,-3);   
  5. var index4=arr.lastIndexOf(1);   
  6. var index5=arr.lastIndexOf(1,4);   
  7. var index6=arr.lastIndexOf(1,-3);   
  8. console.log(index1);//0   
  9. console.log(index2);//2   
  10. console.log(index3);//-1   
  11. console.log(index4);//2   
  12. console.log(index5);//2   
  13. console.log(index6);//2  

7.reduce()和reduceRight()方法
先说reduce()方法吧,reduce()方法使用指定的函数将元素进行组合,生成单个值,reduce()需要两个参数,第一个参数是执行化简操作的函数,化简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回最后的值。第二个参数是累积结果的初始值。
化简函数里面的参数,第一个是累积结果,第一次调用函数时,第一个参数是一个初始值,它就是传给reduce()的第二个参数,化简函数的第二个参数是数组的第一个值,如果reduce()的第二个参数没有传入时,化简函数的第一个参数就是数组的第一个值,第二个参数就是数组的第二个值。看段代码吧,先传入reduce的第二个参数:

  1. var arr=[1,2,1,2,3,4,3,5,4];   
  2. var i=1;   
  3. var sum=arr.reduce(function(x,y){   
  4.     console.log('第'+i+'次x为:'+x);   
  5.     console.log('第'+i+'次y为:'+y);   
  6.     i++;   
  7.     return x+y;   
  8. },0);   
  9. console.log('总共执行'+i+'次');   
  10. console.log('数组的和为'+sum);   
  11. /*
  12. 第1次x为:0  第一次为reduce的第二个参数  
  13. 第1次y为:1  数组的第一个数值  
  14. 第2次x为:1  第一次返回的结果  也就是第一次的x+y的结果  
  15. 第2次y为:2  数组的第二个值  
  16. 第3次x为:3  第二次返回的结果  
  17. 第3次y为:1  数组的第三个值  
  18. 第4次x为:4  第三次返回的值  
  19. 第4次y为:2  ...  
  20. 第5次x为:6  ...  
  21. 第5次y为:3  
  22. 第6次x为:9  
  23. 第6次y为:4  
  24. 第7次x为:13  
  25. 第7次y为:3  
  26. 第8次x为:16  
  27. 第8次y为:5  
  28. 第9次x为:21  
  29. 第9次y为:4  
  30. 总共执行10次  
  31. 数组的和为25  
  32. */  

下面省略reduce的第二个参数:

  1. var arr=[1,2,1,2,3,4,3,5,4];   
  2. var i=1;   
  3. var sum=arr.reduce(function(x,y){   
  4.     console.log('第'+i+'次x为:'+x);   
  5.     console.log('第'+i+'次y为:'+y);   
  6.     i++;   
  7.     return x+y;   
  8. });   
  9. console.log('总共执行'+i+'次');   
  10. console.log('数组的和为'+sum);   
  11. /*
  12.  第1次x为:1 数组的第一值  
  13.  第1次y为:2 数组的第二个值  
  14.  第2次x为:3 第一次的返回值 也就是第一次的x+y  
  15.  第2次y为:1 数组的第三个值  
  16.  第3次x为:4 ....  
  17.  第3次y为:2  
  18.  第4次x为:6  
  19.  第4次y为:3  
  20.  第5次x为:9  
  21.  第5次y为:4  
  22.  第6次x为:13  
  23.  第6次y为:3  
  24.  第7次x为:16  
  25.  第7次y为:5  
  26.  第8次x为:21  
  27.  第8次y为:4  
  28.  总共执行9次  
  29.  数组的和为25  
  30. */  

reduceRight()和reduce()的工作原理一样,不同的是按照数组索引从高到低处理数组。这个就不用代码了。理解从高到低就行了。
8.isArray()方法
这个看名字就知道了。判定一个对象是否为数组。接收一个参数。就是要判断的对象。代码就不必了吧。。

给我留言

留言无头像?


×