JS reduce
2020-07-23 本文已影响0人
_皓月__
reduce是一个进行累积操作的方法,当我们提供初始值时,循环从0开始,如果不提供,则循环从索引1开始。如果数组为空且不提供初始值时reduce会报错,如果想reduce执行,你的数组最低标准应该有一项,同时提供默认值(或数组有两项无初始值)。
它由一个回调函数与一个初始值组成,其中回调函数接受四个参数;
array.reduce(function(total, currentValue, currentIndex, arr), initialValue);
- initialValue 可选。传递给函数的初始值
回调函数参数以及描述: - total 必需。初始值, 或者计算结束后的返回值。
- currentValue 必需。当前元素
- currentIndex 可选。当前元素的索引
- arr 可选。当前元素所属的数组对象。
功能用法
1、数据累加
![](https://img.haomeiwen.com/i6714378/2d8ae5452edaa4a3.png)
2、重复次数计算
let names = ['AAA', 'BBB', 'CCC', 'DDD', 'AAA'];
let nameNum = names.reduce((pre, cur) => {
cur in pre ? pre[cur] += 1 : pre[cur] = 1
return pre
}, {})
console.log(nameNum); // {AAA: 2, BBB: 1, CCC: 1, DDD: 1}
3、数组去重
let names = ['AAA', 'BBB', 'CCC', 'DDD', 'AAA'];
let nameNum1 = names.reduce((pre, cur, index) => {
pre.includes(cur) ? '' : pre.push(cur)
return pre
}, [])
console.log(nameNum1); // ["AAA", "BBB", "CCC", "DDD"]
4、数组对象去重,转数组
const names2 = [
{ name: 'AAA' },
{ name: 'BBB' },
{ name: 'DDD' },
{ name: 'CCC' },
{ name: 'EEE' },
{ name: 'AAA' },
];
let nameNum2 = names2.reduce((pre, cur, index) => {
pre.includes(cur.name) ? '' : pre.push(cur.name)
return pre
}, [])
console.log(nameNum2); // ["AAA", "BBB", "DDD", "CCC", "EEE"]
5、简单类型的Object类型复制克隆
let obj = { a: 1, b: 2, c: 3 };
let obj1 = Object.keys(obj).reduce((total, item) => {
total[item] = obj[item];
return total;
}, {});
console.log(obj); // {a: 1, b: 2, c: 3}
console.log(obj1); // {a: 1, b: 2, c: 3}
console.log(obj === obj1); // false