js中的reduce函数详细解释

22 篇文章 0 订阅
5 篇文章 0 订阅

目录

一、数组求和

二、数组去重

三、合并二维数组

四、统计出现的次数

五、按类型进行分类


reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。循环遍历能做的,reduce都可以做。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

用法: 

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数描述
total必需。初始值, 或者计算结束后的返回值。
currentValue必需。当前元素
currentIndex可选。当前元素的索引
arr可选。当前元素所属的数组对象。
initialValue可选。传递给函数的初始值

一、数组求和

不设置初始值时,数组的第一项就会默认为初始值,下面的例子执行三次;

// 3 + 2

// 5 + 1

// 6 + 7

const numbers = [3, 2, 1, 7];
const sum = numbers.reduce((total, currentValue) => {
  console.log(total, currentValue);
  return total + currentValue;
});
console.log(sum);
// 3 2
// 5 1
// 6 7
// 13

 设置初始值时,下面的例子执行四次;

// 0 + 3

// 3 + 2

// 5 + 1

// 6 + 7

const numbers = [3, 2, 1, 7];
const sum = numbers.reduce((total, currentValue) => {
  console.log(total, currentValue);
  return total + currentValue;
}, 0);
console.log(sum);
// 0 3
// 3 2
// 5 1
// 6 7
// 13

二、数组去重

const numbers = [3, 2, 1, 7, 3, 5, 7];
const resArr = numbers.reduce((prev, currentValue) => {
  if (prev.indexOf(currentValue) === -1) {
    prev.push(currentValue);
  }
  return prev;
}, []);
console.log(resArr); // [3, 2, 1, 7, 5]

三、合并二维数组

const numbers = [[3, 2], [1, 7], [3, 5], [7]];
const resArr = numbers.reduce((prev, currentValue) => {
  return prev.concat(currentValue);
}, []);
console.log(resArr); // [3, 2, 1, 7, 3, 5, 7]

四、统计出现的次数

const arr = ["a", "b", "c", "a", "b"];
const resArr = arr.reduce((prev, currentValue) => {
  if (prev[currentValue]) {
    prev[currentValue]++;
  } else {
    prev[currentValue] = 1;
  }
  return prev;
}, {});
console.log(resArr); // { a: 2, b: 2, c: 1 }

五、按类型进行分类

const arr = [
  {
    name: "Apple",
    num: 12,
  },
  {
    name: "Apple",
    num: 13,
  },
  {
    name: "Banana",
    num: 14,
  },
];
const resArr = arr.reduce((prev, currentValue) => {
  // 根据name进行分类
  var key = currentValue["name"];
  if (!prev[key]) {
    prev[key] = [];
  }
  prev[key].push(currentValue);
  return prev;
}, {});
console.log(resArr);
// {
//   Apple: [ { name: 'Apple', num: 12 }, { name: 'Apple', num: 13 } ],
//   Banana: [ { name: 'Banana', num: 14 } ]
// }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小•愿望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值