ES5定义了五个迭代方法,每一个方法都接收两个参数:要在每一项上运行的函数和运行该函数的做用域对象(可选的),做用域对象将影响this的值。传入这些方法中的函数会接收三个参数:数组的项的值、该项在数组中的位置和数组对象自己。数组
1.every() 和 some()浏览器
every()是对数组中的每一项运行给定函数,若是该函数对每一项都返回true,则返回true。函数
some()是对数组中的每一项运行给定函数,若是该函数对任一项返回true,则返回true。this
every()和some()很类似,他们都用于查询数组中的项是否知足某个条件,对every()来讲,传入的函数必须对每一项都返回true,这个方法才返回true;不然,则返回false。而some()方法则只要传入的函数对数组中的某一项返回true,就会返回true。例如:对象
var numbers=[1,2,3,4,5,4,3,2,1];作用域
var everyResult=numbers.every(function(item,index,array){it
return (item>2);io
});for循环
alert(everyResult);//falsefunction
var someResult=numbers.some(function(item,index,array){
return (item>2);
});
alert(someResult);//true
以上代码调用了every()和some(),传入的函数只要给定项大于2就会返回true。对于every(),它返回的是false,由于只有部分数组符合条件 ; 而对于some(),结果就是true,由于至少有一项是大于2的。
2.filter()
filter()是对数组中的每一项运行给定函数,返回该函数会返回true的项所组成的数组。它利用指定的函数肯定是否在返回的数组中包含某一项。例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var filterResult=numbers.filter(function(item,index,array){
return (item>2);
});
alter(filterResult); //[3,4,5,4,3];
此例子中,传入的函数要返回一个全部数值都大于2的数组,经过调用filter()方法建立并返回了包含3/4/5/4/3的数组,由于传入的函数对它们的每一项都返回true。这个方法对查询符合某些条件的全部数组项很是有用。
3.map()
map()是对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。这个数组的每一项都是在原始数据中的对应项上运行传入函数的结果,例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var mapResult=numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
以上代码返回的数组中包含每一个数乘以2以后的结果,这个方法适合建立包含的项与另外一个数组一一对应的数组。
4.forEach()
forEach() 是多数组中的每一项运行给定函数,这个方法没有返回值。它只是对数组中的每一项运行传入的函数,没有返回值。本质上与使用for循环迭代数组同样。
var numbers=[1,2,3,4,5,4,3,2,1];
numbers.forEach(function(iterm,index,array){
//执行某些操做
});
总结:这些数组方法经过执行不一样的操做能够大大方便处理数组的任务,支持这些迭代方法的浏览器有IE9+、Firfox2+、Safari3+、Opera9.五、Chrome。