JS reduce

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((prev, cur, index) => {
  // prev.includes(cur) ? '' : prev.push(cur);
  prev.includes(cur) || prev.push(cur);
  return prev
}, [])
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

6、求数组项最大值或最小值

let arr = [1, 2, 3, 3, 2, 4];
let max = arr.reduce(function (prev, cur) { 
  return Math.max(prev,cur); 
});
let min = arr.reduce(function (prev, cur) { 
  return Math.min(prev,cur); 
});
console.log(max); // 4
console.log(min); // 1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容