Array.reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值

文章目录

  • 1、语法
  • 2、参数解析
  • 3、高阶用法
    • 1、计算数组中没个元素出现的次数
    • 2、数组去重
    • 3、将二维数组转化为一维
    • 4、将多维数组转化为一维
    • 5、对象里的属性求和

1、语法

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

reducer 函数接收4个参数:

  1. Accumulator (acc) (累计器) (初始值或上次返回的值)
  2. Current Value (cur) (当前值)
  3. Current Index (idx) (当前索引)
  4. Source Array (src) (源数组)

您的 reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。


2、参数解析

var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {console.log(prev, cur, index);return prev + cur;
})console.log(arr, sum);

打印结果:
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10

未设置初始值,索引从1开始

var  arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {console.log(prev, cur, index);return prev + cur;
},0) //注意这里设置了初始值console.log(arr, sum);

打印结果:
0 1 0
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10

设置了初始值,索引从0开始,第一次返回值是初始值

如果传入的数组为空,并且没有设置初始值,会报错!!!!!


3、高阶用法

1、计算数组中没个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];let nameNum = names.reduce((pre,cur)=>{if(cur in pre){pre[cur]++}else{pre[cur] = 1 }return pre
},{})console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

2、数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{if(!pre.includes(cur)){return pre.concat(cur)}else{return pre}
},[])console.log(newArr);// [1, 2, 3, 4]

3、将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{return pre.concat(cur)
},[])console.log(newArr); // [0, 1, 2, 3, 4, 5]

4、将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

5、对象里的属性求和

var result = [{subject: 'math',score: 10},{subject: 'chinese',score: 20},{subject: 'english',score: 30}
];var sum = result.reduce(function(prev, cur) {return cur.score + prev;
}, 0);console.log(sum) //60

Array.reduce()的用法与进阶相关推荐

  1. JS Array.reduce 对象属性累加

    Array reduce 数组对象使用 无非就是 计算数组元素 相加后的总和 ,看网上给的Demo 全是 [1,2,3,4,6].reduce 这种基本用法, 在实际开发中 数组中一般都是放对象 本次 ...

  2. foreach用法_25个你不得不知道的数组reduce高级用法

    作者:JowayYoung 仓库:Github.CodePen 博客:掘金.思否.知乎.简书.头条.CSDN 公众号:IQ前端 联系我:关注公众号后有我的微信哟 特别声明:原创不易,未经授权不得对此文 ...

  3. 自从学会了 Array.reduce() ,再也离不开它

    作者简介: 李中凯老师,8年前端开发,前端负责人,擅长JavaScript/Vue. 公众号:1024译站 掘金文章专栏:https://juejin.im/user/57c7cb8a0a2b5800 ...

  4. es6中reduce的用法_25个你不得不知道的数组reduce高级用法

    背景 距离上一篇技术文章<1.5万字概括ES6全部特性>发布到现在,已经有整整4个月没有输出过一篇技术文章了.哈哈,不是不想写,而是实在太忙,这段时间每天不是上班就是加班,完全没有自己的时 ...

  5. java reduce.mdn_编程语言你不得不知道的数组reduce高级用法

    背景 距离上一篇技术文章<1.5万字概括ES6全部特性>发布到现在,已经有整整4个月没有输出过一篇技术文章了.哈哈,不是不想写,而是实在太忙,这段时间每天不是上班就是加班,完全没有自己的时 ...

  6. 20个你不得不知道的数组reduce高级用法

    目录 1 背景 2 高级用法 3 兼容和性能 4 结语 1 背景 reduce 作为ES5新增的常规数组方法之一,对比 forEach .filter 和 map,在实际使用上好像有些被忽略,发现身边 ...

  7. python中使用函数的优点_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  8. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

  9. python基础函数及用法意思_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

最新文章

  1. 学会python爬虫怎么赚钱-学会Python爬虫能赚大钱吗?Python爬虫赚钱渠道分享
  2. HTML去掉列表前面的符号!
  3. linux磁盘划分注意,划分磁盘阵列注意问题
  4. python运维处理序列_Python运维开发:02 序列
  5. python个位怎么表示_如何在django管理中表示位标志int字段?
  6. 巩固——Vue中proxyTable代理接口的配置
  7. 二分图——匈牙利算法——的学习
  8. C#技术分享【PDF转换成图片——11种方案】
  9. 因为机遇,不会轻易悲伤
  10. SQL Sever 创建视图
  11. C语言选择循环练习题
  12. linux redis配置文件位置,Linux 安装配置Redis
  13. 【系统分析师之路】原创章节 重构与改善设计思维导图
  14. 装系统弹出计算机丢失,重装系统时提示缺少硬盘驱动怎么解决
  15. c语言趣味菜单实验报告,DSP实验报告+心得体会
  16. java使用Aspose.pdf实现pdf转图片
  17. kafka connector使用(Docker一键启动版)
  18. EEG实验中Matlab打标方法及遇见问题
  19. 最流行的前端框架vue基础
  20. APP登录功能的Java服务端开发

热门文章

  1. 轻松捕捉85点策略:欧元/日元经典交易策略全公开
  2. MADDPG论文中文翻译
  3. 商品SPU与SKU说明
  4. 什么是WRAP认证?WRAP认证详解
  5. Grafana 教程 - 构建你的第一个仪表盘
  6. 利用函数模板解决双倍功能
  7. 画出android音乐播放器的类图,基于Qt图形框架音乐播放器的设计与实现
  8. Pillar-based Object Detection for Autonomous Driving(基于柱体的自动驾驶目标检测)论文笔记
  9. 华为DHCP Snooping原理及其实验配置
  10. qiankun 传统项目配置_前端微服务