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
