ES5迭代方法及归并方法every()、filter()、map()、forEach()、some()、reduce()、reduceRight()

ECMAScript5为数组定义了5个迭代的方法。且每个方法都是要接收两个参数:要在每一项运行的函数,以及运行函数的作用域。并且相对于方法,方法中的函数还需要接受三个参数:

  • 数组的项(item)
  • 该项在数组中的位置(index)
  • 数组对象本身(array)

ES5的五种迭代方法:

  1. every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
  2. filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
  3. forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  4. map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  5. some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

对于这五种方法中,最相似的莫过于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归并方法:

ES5新增两个归并数组的方法:reduce()和reduceRight()。这两个方法都会得带数组中的所有项,然后构建一个最终返回值。

  • reduce()从数组的第一项开始,遍历到最后
  • reduceRight()从最后一项开始,向前遍历到第一项

这两个方法跟迭代方法一样,接受两个参数:在每一项调用的函数,作为归并基础的初始值。方法中,函数需要接收四个参数:

  • 前一个值(prev)
  • 当前值(cur)
  • 项的索引(index)
  • 数组对象(array)

注意:这个函数返回的任何值都会作为第一个参数传递给下一项。

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(),取决于你是从头开始遍历数组,还是从末尾开始。

你可能感兴趣的:(JavaScript)