JS数组中的reduce()方法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

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

reduce()

arr.reduce(callback, initialValue)

reduce会为数组中的每个元素执行回调函数,回调函数(callback)有四个参数,分别为

prev: 上一次执行完返回的值(包括初始值)

item: 当前的元素(当前执行回调函数的元素)

index: 当前元素位置(下标index值)

arr: 原数组(执行的当前数组)

initialValue: 可选,第一次执行回调函数的初始值(也就是第一次执行回调函数时, prev的初始值,可以给他赋值为一个[], {}或者一个数字)

例子

数字求和

 let arr = [1, 2, 3, 4, 5];
 let sum = arr.reduce((prev, item) => {
    console.log(prev, item);
    return prev + item;
  });
  console.log(sum);

在这里插入图片描述
添加一个初始值

 let arr = [1, 2, 3, 4, 5];
 let sum = arr.reduce((prev, item) => {
    console.log(prev, item);
    return prev + item;
  } 10); // 这里设置了初始值
  console.log(sum);

在这里插入图片描述
如果没有添加初始值,第一次回调从数组的index为1的地方开始执行,而添加初始值后第一次回调从数组的index为0的地方开始执行

有时候不设置初始值会报错

  let arr = [1, 2, 3, 4, 5];
  let Arr = arr.reduce((prev, item) => {
      console.log(prev, item);
      prev.push(item);
      return prev;
  });
  console.log(Arr);

在这里插入图片描述
添加初始值后

  let arr = [1, 2, 3, 4, 5];
  let Arr = arr.reduce((prev, item) => {
      console.log(prev, item);
      prev.push(item);
      return prev;
  }, []); // 设置初始值后
  console.log(Arr);

在这里插入图片描述

使用的时候最好给一个初始值,否则有时候报错

reduce() 功能

1. 数字求和(上面已介绍)
2. 数字阶乘
 let arr = [1, 2, 3, 4, 5];
 let sum = arr.reduce((prev, item) => {
     console.log(prev, item);
     return prev * item;
 }, 1);
 console.log(sum);

在这里插入图片描述

3. 数组去重
 let Arr = [1, 3, 2, 2, 4, 5]
 let arr = Arr.reduce((prev, item) => {
     if (!prev.includes(item)){
         prev.push(item);
     }
     return prev;
 }, []);
 console.log(arr);

在这里插入图片描述

4. 计算数组中每个元素出现的个数
 let Arr = [1, 3, 2, 2, 4, 5];
 let arr = Arr.reduce((prev, item) => {
     if (item in prev) {
         prev[item]++;
     } else {
         prev[item] = 1;
     }
     return prev;
 }, {});
 console.log(arr);

在这里插入图片描述

5. 除去数组中的嵌套数组
 let Arr = [[2, 5, 9], [0, 3]];
 let arr = Arr.reduce((prev, item) => {
     // 使用concat() 或者[...]将两个数组合并
     // let as = prev.concat(item);
     let as = [...prev, ...item];
     return as;
  }, []);
  console.log(arr);

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值