Array-迭代方法

迭代方法

  ECMAScript为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运动的函数和(可选的)运行该函数的作用域对象——影响this的值。传人这些方法中的函数会接收三个函数:数组项的值、该项在数组中的位置和数组对象本身。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响访问的返回值。以下是5个迭代的方法的作用。

  •every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

  •filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。

  •forEach():对数组中的每一项运行给定函数,这个方法没有返回值。

  •map():对数组中每一项运行给定函数,返回每次函数调用的结果组成的函数。

  •some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true

  以上方法都不会修改数组中的包含的只。

  这些方法中,最相似的是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){
    return (item>2);
});
alert(everyResult);//false

var someResult=numbers.some(function(item,index,array){
    return (item>2);
});
alert(someResult);//true

  以上代码调用了every()和some(),传人的函数只要给定项大于2就会返回true。对于every(),它返回的是false,因为只有部分数组项符合条件。对于some(),结果就是true,因为至少有一项是大于2的。

  下面再看一看fileter()函数,它利用指定的函数确定是否在返回的数组中包含的某一项。例如,要返回一个所有数值都大于2的数组,可以使用以下代码。

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]

  这里,通过调用filter()方法创建并返回包含了3,4,5,4,3的数组,因为传人的函数对它们每一项都返回true。这个方法查询符合某些条件的所有数组项非常有用。

  map()也返回一个数组,而这个数组的每一项都是在原始数组中的对象项上运行传人函数的结果。例如,可以给数组中的每一项乘以2,然后返回这些乘积组成的数组,如下所示。

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子之后返回的结果,这个方法适合创建包含的项与另一个数组一一对应的数组。

  最后一个方法是forEach(),它只是对数组中的每一项运动传人的函数。这个方法没有返回值,本质上与使用for循环迭代数组一样。来看一个例子。

var numbers=[1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,array){
   //执行某些操作 
});

  这些数组方法通过执行不同的操作,可以大大方便处理数组的任务。支持这些迭代方法的浏览器有IE9+,Firefox2+,Safari3+,Opera9.5+和Chrome。

posted @ 2015-06-09 11:58  一日三餐  阅读(846)  评论(0编辑  收藏  举报