>[danger]一面:手写reduce `Array.prototype.reduce()` 是 JavaScript 中数组对象的一个内置方法,它用于对数组中的每个元素执行一个回调函数,并将结果累积起来。`reduce` 方法接收一个回调函数和一个初始值作为参数,并且可以实现各种各样的累积计算,比如求和、求积、拼接字符串等操作。 下面是 `reduce` 方法的基本语法: ```javascript array.reduce(function(accumulator, currentValue, currentIndex, array) { // 回调函数 }, initialValue); ``` - `accumulator`:累加器,它累积回调函数的返回值,或者是初始值(如果有的话)。 - `currentValue`:当前正在处理的数组元素。 - `currentIndex`:当前正在处理的数组元素的索引(可选)。 - `array`:调用 `reduce` 方法的数组(可选)。 - `initialValue`:初始值,作为第一次调用回调函数时的第一个参数(可选)。 现在让我们手写实现一个简化版的 `reduce` 方法: ```javascript function customReduce(arr, callback, initialValue) { let accumulator = initialValue === undefined ? arr[0] : initialValue; const startingIndex = initialValue === undefined ? 1 : 0; for (let i = startingIndex; i < arr.length; i++) { accumulator = callback(accumulator, arr[i], i, arr); } return accumulator; } // 示例用法 const arr = [1, 2, 3, 4, 5]; // 求和 const sum = customReduce(arr, (acc, current) => acc + current, 0); console.log(sum); // 输出 15 // 求积 const product = customReduce(arr, (acc, current) => acc * current, 1); console.log(product); // 输出 120 ``` 在上面的示例中,我们定义了一个 `customReduce` 函数,它接收一个数组 `arr`、一个回调函数 `callback` 和一个初始值 `initialValue`。然后在函数内部,我们使用循环遍历数组,并在每次迭代中更新累加器 `accumulator` 的值,最后返回累加器的最终结果。