Skip to content
快看这页儿写了啥...

JS 实现数组 reduce 方法

题干

JavaScript 中数组原型方法 reduce 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。

其语法为:

js
reduce(callbackFn)
reduce(callbackFn, initialValue)

function reducer(previousValue, currentValue, currentIndex, arr){}

// callbackFn:       必须,reducer 函数
//   previousValue:  必需。上一次调用 callbackFn 时的返回值
//   currentValue:   必需。数组中正在处理的元素
//   currentIndex:   可选。数组中正在处理的元素的索引
//   arr:            可选。用于遍历的数组
// initialValue:     可选。传递给函数的初始值,相当于 previousValue 的初始值

简单来说就是对一个 array 执行 reduce 方法,就是把其中的 function() 挨个地作用于 array 中的元素上,而且上一次的输出会作为下一次的一个输入。

注意:reduce 对于空数组是不会执行回调函数的。

🌰.01

下面是一个 reduce 方法示例:

js
let array = [1, 2, 3, 4, 5];
array.reduce((sum, curr) => sum + curr, 0); // 15

题解

js
Array.prototype.myReduce = function (callback, initialValue) {
  let accumulator = initialValue === undefined ? undefined : initialValue;
  for (let i = 0; i < this.length; i++) {
    if (accumulator !== undefined) {
      // 如果初始值不为 undefined,则将其赋值给累加器;否则,将数组的第一个元素赋值给累加器。
      accumulator = callback.call(undefined, accumulator, this[i], i, this);
    } else {
      accumulator = this[i];
    }
  }
  return accumulator;
};

console.log([1,2,3,4,5].myReduce((pre, cur, curIdx, arr) => pre + cur)) // 15
console.log([1,2,3,4,5].myReduce((pre, cur, curIdx, arr) => pre + cur, 10)) // 25

扩展

MDN - reduce

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐