reduce:
reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
参数:
reducer 函数接收4个参数:
Accumulator (acc) (累计器)
Current Value (cur) (当前值)
Current Index (idx) (当前索引)
Source Array (src) (源数组)
语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
小记:
1、initialValue作为第一个调用callback函数第一个参数的值,有则callback函数调用第一个值为initialValue,否则为源数组中的第一个值;
2、空数组且没有initialValue执行代码,typeerror报错;
3、如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。
demo:
有初使值
let a = [1, 2, 3, 4];
a.reduce((prev, item, index, souceArr) => {
console.log(prev, item,index);
return prev + item;
},0);
无初始值
let a = [1, 2, 3, 4];
a.reduce((prev, item, index, souceArr) => {
console.log(prev, item,index);
return prev + item;
});
代码实现交集需求:
let obj = {};
let linearArray = [1, 2, 3, 4, 5];
let treeData = [
{name: 'zhangsan', id: 1},
{name: 'lisi', id: 2},
{name: 'wangwu', id: 3},
];
let result = [];
result = treeData.reduce((prev, v, i, arr) => {
obj[v.id] ? '' : obj[v.id] = true && prev.push(v);
return prev;
}, []);
更多应用情景请参考MDN。
技术文献:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce