目录
ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:每次迭代时运行的函数与该函数作用域对象this。其中,函数参数是每次迭代时,当前元素都会执行的函数,我称之为“迭代函数”。该函数会接收三个参数:当前迭代的元素、当前迭代元素的索引和数组对象本身。以下是这5种方法:
- every():数组元素执行迭代函数,如果该函数对所有元素的执行结果都为true则返回true。
- filter():数组元素执行迭代函数,返回该函数对元素执行结果为true所组成的新数组。
- forEach():数组元素执行迭代函数(仅仅是执行函数)。
- map():数组元素执行迭代函数,返回每次函数调用的结果组成的数组。
- some():数组元素执行迭代函数,如果该函数对任意一个元素的执行结果为true则返回true。
以上的方法都不会修改数组中所包含的值。
判断函数every()与 some()
在这些方法中,最相似的是 every()和 some(),它们都用于查询数组中的项是否满足某个条件。对 every()来说,传入的函数必须对每一项都返回 true,这个方法才返回 true;否则,它就返回 false。而 some()方法则是只要传入的函数对数组中的某一项返回 true,就会返回 true。请看以下:
var numbers = [1,2,3,4,5];
var everyResult = numbers.every(function(item){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item){
return (item > 2);
});
alert(someResult); //true
以上代码调用了 every()和 some(),传入的函数只要给定项大于 2就会返回 true。对于 every(), 它返回的是 false,因为只有部分数组项符合条件。对于 some(),结果就是 true,因为至少有一项 是大于 2 的。
注意:对于evey函数,如果当前迭代的元素不满足条件,则立刻终止迭代。同理,对于some函数,如果当前迭代元素满足条件,也立刻终止迭代。
过滤函数filter()
filter()函数通过指定函数来筛选出满足指定条件的数组元素最终组合成一个新的数组并返回。例如下面这个例子:
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
映射函数map()
map()函数也返回一个数组,与filter函数不同的是,它并不会筛选掉不满足条件的元素而组成新的数组。相反,它只是对迭代元素进行操作或判断之后将结果存储在一个新的数组中并返回。例如我们将筛选函数的例子一下:
var numbers = [1,2,3,4,5,4,3];
var filterResult = numbers.map(function(item, index, array){
return (item > 2);
});
alert(filterResult); //false,false,true,true,true,true,true
filterResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(filterResult); //2,4,6,8,10,8,6
执行函数forEach()
forEach()函数仅仅是为每次迭代的元素添加执行函数而已。该函数并不会返回什么,本质上仅仅是用来循环迭代数组而已,只不过我们仍然可以在里面添加一些操作。
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item, index, array){
//执行某些操作
});
归并函数reduce()
迭代计算的方法reduce函数接收一个函数作为累加值,数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,最终为一个值。语法格式如下:
ArrayObj.reduce(function(total, item, index, array){
//执行代码
},initialValue)
- callback (必选。迭代数组中每个元素的函数,包含四个参数)
total:初始值或是计算结束后返回的值。
item:当前迭代元素的值
index:当前迭代元素的索引值
array:当前迭代的数组对象
- nitialValue (可选。传递给函数的初始值)
接下来我们来看看具体的实例
var items = [1,2,3,4,5];
var num = items.reduce(function(total,item){
return total+item;
});
console.log(num); //15