JS reduce

作者: _皓月__ | 来源:发表于2020-07-23 15:16 被阅读0次

reduce是一个进行累积操作的方法,当我们提供初始值时,循环从0开始,如果不提供,则循环从索引1开始。如果数组为空且不提供初始值时reduce会报错,如果想reduce执行,你的数组最低标准应该有一项,同时提供默认值(或数组有两项无初始值)。

它由一个回调函数与一个初始值组成,其中回调函数接受四个参数;
array.reduce(function(total, currentValue, currentIndex, arr), initialValue);

  • initialValue 可选。传递给函数的初始值
    回调函数参数以及描述:
  • total 必需。初始值, 或者计算结束后的返回值。
  • currentValue 必需。当前元素
  • currentIndex 可选。当前元素的索引
  • arr 可选。当前元素所属的数组对象。

功能用法

1、数据累加

reduce.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

相关文章

网友评论

    本文标题:JS reduce

    本文链接:https://www.haomeiwen.com/subject/zplhlktx.html