前端面试题 - 95. 聊聊reduce原理,手写reduce

1,048 阅读1分钟

reduce是一个非常有用的函数,它可以将一个集合中的元素通过指定的操作进行累积。其原理非常简单,以JavaScript为例,手写一个reduce函数如下:

function reduce(arr, reducer, initialValue) {
  let accumulator = initialValue;
  let start = 0;
      
  if(initialValue == null) {// 没传初始值的处理
      accumulator = arr[0]; 
      start = 1;
  }

  for (let i = start; i < arr.length; i++) {
    accumulator = reducer(accumulator, arr[i], i, arr);
  }

  return accumulator;
}

这个reduce函数接受三个参数:arr(数组),reducer(函数)和initialValue(初始值)。在函数内部,首先声明一个变量accumulator用于保存累积结果,并将其赋值为初始值。

然后使用一个循环遍历数组中的每个元素,将当前的累积结果和当前元素传递给reducer函数进行处理,并将返回的结果更新到accumulator中。

最后,将最终的累积结果作为函数的返回值。

例如,我们可以使用reduce函数来计算数组中所有元素的总和:

const numbers = [1, 2, 3, 4, 5];

const sum = reduce(numbers, (accumulator, current) => accumulator + current, 0);

console.log(sum); // 输出: 15

在上面的例子中,初始值设置为0,累积操作即为相加(accumulator + current),最终得到了数组中所有元素的总和15。