ECMAScript5为数组定义了5个迭代的方法。且每个方法都是要接收两个参数:要在每一项运行的函数,以及运行函数的作用域。并且相对于方法,方法中的函数还需要接受三个参数:
对于这五种方法中,最相似的莫过于every()、some()了。它们都是用于查询数组中的项是否满足某个指定的条件。在some方法中,只要有其中一个项满足条件,那么它就返回true。every则对应的是,必须每一项都满足条件,它才返回true,否则返回false。
every()方法:
var numbers=[1,2,3,4,5,6,5,4,3,2,1];//设置数组
var everyWay=numbers.every(function(item,index,array){
return (item>2);//判断数组中大于2的项
});
alert(everyWay);//不满足全部大于2,返回false
filter()方法:
var numbers=[1,2,3,4,5,6,5,4,3,2,1];//设置数组
var filterWay=numbers.filter(function(item,index,array){
return (item>2);//判断数组中大于2的项
});
alert(filterWay);//部分满足大于2的项,返回ture组成的数组[3,4,5,6,5,4,3]
forEach()方法:
var numbers=[1,2,3,4,5,6,5,4,3,2,1];//设置数组
var forEachWay=numbers.forEach(function(item,index,array){
//执行某些操作
});
alert(forEachWay);//没有返回值,与使用for循环迭代数组一样
map()方法:
var numbers=[1,2,3,4,5,6,5,4,3,2,1];//设置数组
var mapWay=numbers.map(function(item,index,array){
return item*3;//对数组的每一项进行乘三的乘法操作
});
alert(mapWay);//返回这些乘积组成的数组[3,6,9,12,15,18,15,12,9,6,3]
some()方法:
var numbers=[1,2,3,4,5,6,5,4,3,2,1];//设置数组
var someWay=numbers.some(function(item,index,array){
return (item>2);//判断数组中大于2的项
});
alert(someWay);//部分项大于2,满足其任一项为true,返回true
ES5新增两个归并数组的方法:reduce()和reduceRight()。这两个方法都会得带数组中的所有项,然后构建一个最终返回值。
这两个方法跟迭代方法一样,接受两个参数:在每一项调用的函数,作为归并基础的初始值。方法中,函数需要接收四个参数:
注意:这个函数返回的任何值都会作为第一个参数传递给下一项。
reduce()方法:
var values=[1,2,3,4,5];//设置数组
var sum=values.reduce(function(prev,cur,index,array){
return prev+cur;//执行数组中左右值之和的操作,prev是1,cur为2第二次则为prev是3,cur是3
});
alert(sum);//结果为15
reduceRight()方法:
var values=[1,2,3,4,5];//设置数组
var sum=values.reduceRight(function(prev,cur,index,array){
return prev+cur;//执行数组中左右值之和的操作,prev为5,cur是4开始
});
alert(sum);//结果为15
使用这两个方法,最终的结果是相同的,要使用reduce()还是reduceRight(),取决于你是从头开始遍历数组,还是从末尾开始。