一、语法
arr.reduce(function(prev,cur,index,arr){
…
}, init);
个中,
arr 示意将要原数组;
prev 示意上一次调用回调时的返回值,或许初始值 init;
cur 示意当前正在处置惩罚的数组元素;
index 示意当前正在处置惩罚的数组元素的索引,若供应 init 值,则索引为0,不然索引为1;
init 示意初始值。
看上去是否是觉得很庞杂?没紧要,只是看起来罢了,实在经常运用的参数只要两个:prev 和 cur。接下来我们随着实例来看看详细用法吧~
二、实例
先供应一个原始数组:
var arr = [3,9,4,3,6,0,9];
完成以下需求的体式格局有许多,个中就包括运用reduce()的求解体式格局,也算是完成起来比较简约的一种吧。
- 求数组项之和
var sum = arr.reduce(function (prev, cur) {
return prev + cur;
},0);## 题目笔墨 ##
因为传入了初始值0,所以最先时prev的值为0,cur的值为数组第一项3,相加以后返回值为3作为下一循环调的prev值,然后再继承与下一个数组项相加,以此类推,直至完成一切数组项的和并返回。
- 求数组项最大值
==========
var max = arr.reduce(function (prev, cur) {
return Math.max(prev,cur);
});
因为未传入初始值,所以最先时prev的值为数组第一项3,cur的值为数组第二项9,取两值最大值后继承进入下一循环调。
- 数组去重
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
完成的基本原理以下:
① 初始化一个空数组
② 将需要去重处置惩罚的数组中的第1项在初始化数组中查找,假如找不到(空数组中一定找不到),就将该项添加到初始化数组中
③ 将需要去重处置惩罚的数组中的第2项在初始化数组中查找,假如找不到,就将该项继承添加到初始化数组中
④ ……
⑤ 将需要去重处置惩罚的数组中的第n项在初始化数组中查找,假如找不到,就将该项继承添加到初始化数组中
⑥ 将这个初始化数组返回
三、其他相干要领
- reduceRight()
该要领用法与reduce()实际上是雷同的,只是遍历的递次相反,它是从数组的末了一项最先,向前遍历到第一项。
- forEach()、map()、every()、some()和filter()
重点总结:
reduce() 是数组的合并要领,与forEach()、map()、filter()等迭代要领一样都邑对数组每一项举行遍历,然则reduce() 可同时将前面数组项遍历发生的结果与当前遍历项举行运算,这一点是其他迭代要领没法企及的