ES5中为数组定义了5种迭代的方法。每一个方法都接受两个参数,第一个为要在每一项上运行的函数,第二个参数可选,即为运行该函数的作用域对象---影响this的值。传入的方法中接受三个参数:数组的值,该项在数组中的索引和数组本身。根据使用的方法的不同,返回的东西也不同,这个是必然的。
every():对数组中的每一项运行给定的函数,如果该函数对每一项运行的结果都是返回true,则最终返回true。
filter():对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组。
forEach():对数组中的每一项运行给定的函数,这个方法没有返回值
map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组
some():对数组中的每一项运行给定的函数,如果该函数对任意一项返回true了,则最终返回true。
其实这都说的挺明白的,具体的每一个举个例子大家感受下:
先对比下some和every吧
var numbers=[1,2,3,4,5,6,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,arr){
return(item>2);
});
alert(everyResult);//false
var someResult = numbers.some(function(item,index,arr){
return(someResult);
});
alert(someResult);//true
上面的代码非常的简单明了,节选自《Javascript高级程序设计》,也就是说every要每一项都满足我才给你过,some则是只要有一项满足我就给你过,类似&和||一样
下面说说filter这个函数
举个栗子:
var numbers = [1,2,3,4,5,6,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,arr){
return(item>2);
});
alert(filterResult);//[3,4,5,6,5,4,3];
顾名思义,过滤器嘛,满足则过滤出来
map(),返回的也是一个数组,而这个数组的每一项都是原始数组中的对应项上运行传入函数的结果。
例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item,index,arr){
return item*2;
});
alert(mapResult);//[2,4,6,8,10,8,6,4,2];
最后一个forEach就比较简单了
其实和for(var i = 0,length = arr.length;i<length;i++){...}一样
就是一个遍历,来循环迭代数组
方法接受的参数依旧是item,index,array