reduce与reduceRight 实现myReduce myReduceRight
reduce
归纳函数 返回一个新数组
[].reduce(function (prev, elem, index, arr) { }, initialValue);
第一个参数(回调函数)
回调函数中的第一个参数prev
表示上一次回调返回的值 第一次时为传入的第二个参数即initialValue
后三个参数
第二个参数
initialValue 与其他遍历方法不同的是 这个参数是必填项
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]; var initialValue = []; arr.reduce(function (prev, elem, index, arr) { console.log(prev, elem, index, arr); }, initialValue);
prev 就是 initialValue
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]; var initialValue = []; arr.reduce(function (prev, elem, index, arr) { console.log(prev === initialValue); }, initialValue);
必须每次return prev 才会有值 不会返回undefined
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]; var initialValue = []; arr.reduce(function (prev, elem, index, arr) { console.log(prev); return prev; }, initialValue);
每次遍历时都可以对prev进行处理
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]; var initialValue = []; var newArr = arr.reduce(function (prev, elem, index, arr) { prev.push(elem.id); console.log(prev); return prev; }, initialValue);
实现myReduce
Array.prototype.myReduce = function (fn, initialValue) { var arr = this, len = arr.length, arg2 = arguments[2] || window; for (var i = 0; i < len; i++) { initialValue = fn(initialValue, arr[i], i, arr); } return initialValue; };
reduceRight
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]; var initialValue = []; var newArr = arr.reduceRight(function (prev, elem, index, arr) { prev.push(elem.id); return prev; }, initialValue);
实现myReduceRight
Array.prototype.myReduceRight = function (fn, initialValue) { var arr = this, len = arr.length; for (var i = len - 1; i >= 0; i--) { initialValue = fn(initialValue, arr[i], i, arr); } return initialValue; };
下一篇:
多线程的同步synchronized