reduce()
- 关于reduce MDN 文档的介绍 :
const array1 = [1, 2, 3, 4];
// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
(accumulator, currentValue) => accumulator + currentValue,
initialValue
);
console.log(sumWithInitial); // Expected output: 10
-
reduce 逐个遍历数组元素,每一步都将当前元素的值与上一步的计算结果相加(上一步的计算结果是当前元素之前所有元素的总和)——直到没有更多的元素被相加。
-
参数介绍:
-
reduce 的介绍就到这里 不理解的小伙伴可以查阅官方资料 developer.mozilla.org/en-US/docs/…
-
接下来我们进入本文关键探索一下如何实现一个 自己的 reduce 方法
实现 reduce 上代码
- 添加Array 数组原型方法
Array.prototype.myReduce = myReduce;
- 创建该方法
// 手写 reducer
function myReduce(callback , initialValue) {
// this 为当前调用的数组 [15, 16, 17, 18, 19]
let dataArray = [...this]; // 使用深拷贝进行处理 (这里我简单使用了es6 的数组解析处理 浅拷贝)
if(initialValue){
dataArray.unshift(initialValue);
}
let callBackValeu = initialValue;
for (let index = 0; index < dataArray.length - 1; index++) {
// 目前传递了两个参数 如果觉得参数不够可自由传递
callBackValeu = callback(callBackValeu == initialValue ? dataArray[index] : (callBackValeu) , dataArray[index + 1] );
}
return callBackValeu;
}
- 使用
// reduce无第二个参数情况下
const value = [15, 16, 17, 18, 19].myReduce((previousValue, currentValue) => {
return previousValue + currentValue;
});
console.log(value); // output value: 85;
// reduce有第二个参数情况下
const value = [15, 16, 17, 18, 19].myReduce((previousValue, currentValue) => {
return previousValue + currentValue;
},100);
console.log(value); // output value: 185;
此处涉及到 计算的问题相信都知道js计算会有些误差
- 感兴趣的小伙伴们看看我关于计算的文章
- juejin.cn/post/720217…
以上是个人实现 reduce 的思路以及代码 如有更好的思路欢迎小伙伴们一起讨论;