reduce你不知道的事情

109 阅读1分钟

1. reduce你不知道的事情

  • 语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total必需。初始值, 或者计算结束后的返回值。
currentValue必需。当前元素
currentIndex可选。当前元素的索引
arr可选。当前元素所属的数组对象即array。
如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引,即执行array.length-1次循环。默认值取第0个array
如果提供initialValue,从索引0开始。即执行array.length次循环
  • 求数组项之和

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;
},[]);