JavaScript 数组的 reduce 方法怎么用?用 5 个实际应用例子教会你

reduce 函数介绍

在 JavaScript 中,reduce() 是数组的一个高阶函数,作用是把数组中的元素逐个迭代处理,最终输出为一个处理结果。

reduce() 的语法如下:

array.reduce(callback, initialValue);

这个函数接受两个参数:一个回调函数和一个可选的初始值。回调函数 callback 一共可以接受四个参数:

  1. 累加器(上一次回调的返回值或初始值);
  2. 当前元素;
  3. 当前索引;
  4. 数组本身。

难点分析

需要注意的是,只有前面两个参数是必须的。这四个参数也是我当初学习 JavaScript 时最难理解的,主要是不明白被处理数组在其中循环迭代运行的原理。最后还是通过阅读其他人写的代码,然后自己照着写调试,才彻底搞懂。

5个具体的使用例子

1.计算数组元素的总和

这个例子里要重点理解初始值的作用。

const numbers = [10, 5, 7, 2]; 
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0); // 一定要设置初始值是0,否则无法参与计算
console.log(sum); // 输出: 24

2.将数组中的字符串连接成一个句子

和上面例子差不多,迭代运算由算术改成字符串了。

const words = ["Hello", "world", "how", "are", "you"]; 
const sentence = words.reduce((accumulator, currentValue) => accumulator + " " + currentValue); 
console.log(sentence); // 输出: "Hello world how are you"

3.查找数组中的最大值

const values = [15, 8, 21, 4, 10]; 
// 这里设置初始值是负无穷,比任何数都小
const max = values.reduce((accumulator, currentValue) => Math.max(accumulator, currentValue), -Infinity); 
console.log(max); // 输出: 21

虽然用 for 循环也能实现,但 reduce 方法明显效率更高,代码更简洁直观。

4.将二维数组扁平化为一维数组

这也是项目开发中经常用到的代码。

const nestedArray = [[1, 2], [3, 4], [5, 6]]; 
const flattenedArray = nestedArray.reduce((accumulator, currentValue) => {
accumulator.concat(currentValue), []); 
// 这里也可以用更简洁的数组展开新语法 
// [...accumulator,...currentValue]
}
console.log(flattenedArray); // 输出: [1, 2, 3, 4, 5, 6]

5.统计数组中各个元素的出现次数

const fruits = ["apple", "banana", "apple", "orange", "banana", "apple"]; 
const fruitCount = fruits.reduce((accumulator, currentValue) => {accumulator[currentValue] = (accumulator[currentValue] || 0) + 1; return accumulator; 
}, {}); 
console.log(fruitCount); // 输出: { apple: 3, banana: 2, orange: 1 }

最后返回一个对象,显示所有元素的次数,这种方法也是我工作中把数组转为对象的常用方法。

总结

上面这些例子展示了 reduce() 函数在不同场景下对数组执行的各种聚合和转换操作,总的来说,这是个非常有用的函数,希望看完这篇文章之后,能帮助你理解,像我一样逐渐喜欢使用这个方法。

原文链接:JavaScript 数组的 reduce 方法怎么用?用 5 个实际应用例子教会你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Node.js中,什么是中间件(middleware)?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【音视频 | opus】opus编解码库(opus-1.4)详细介绍以及使用——附带解码示例代码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Three.js之PBR材质与环境贴图

参考资料 PBR材质简介…三维软件导出PBR材质属性 知识点 注:基于Three.jsv0.155.0 PBR材质简介PBR材质金属度和粗糙度:metalness、roughness环境贴图.envMap(金属效果):CubeTextureLoader、envMapIntensityMeshPhysicalMaterial清漆层&am…

【已验证】解决PHP连接SQL Server时中文乱码问题23.11.04

测试环境 --php8.2 --apache2.4 --sqlserver2022 一.PHP连接SQLSERVER中文乱码-【问题分析】编码问题 1、SQL语句中有中文会导致执行失败; php连接sqlsever,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8&…

第G7周:Semi-Supervised GAN 理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章:365天深度学习训练营-第G7周:Semi-Supervised GAN 理论与实战(训练营内部成员可读) 🍖 原作者:K同学啊|接…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互,而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示,但它们忽略了对密集预测任务非常重要的被忽略的角点区…

【论文精读】PlanT: Explainable Planning Transformers via Object-Level Representations

1 基本信息 院校:德国的图宾根大学 网站:https://www.katrinrenz.de/plant 2 论文背景 2.1 现有问题 现在的基于学习的方法使用高精地图和BEV,认为准确的(达到像素级的pixel-level)场景理解是鲁棒的输出的关键。re…

Java自学第1课:安装JDK+Eclipse

1 引言 在学习前,我想说一句,那就是为什么要学习Java。 每个人的出发点都不同,对于做信息化的工程技术人员来说,java不懂,就没法干项目。 尽管有c和matlab等基础,但java看起来与这些语言都不太一样。 做…

【从0到1设计一个网关】基于Hystrix实现熔断降级

文章目录 依赖引入服务降级效果演示上文我们已经成功实现了请求重试与请求限流,接下来我们开始实现熔断与服务降级。 熔断与服务降级,在SpringCloud中设计到的就是我们的hystrix,这里我们也将会考虑配合hystrix来实现熔断与服务降级。 如果不了解hystix的可以先进行一下了解…

LeetCode 面试题 16.16. 部分排序

文章目录 一、题目二、C# 题解 一、题目 给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序…

基于单片机的智能饮水机系统

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统设计方案分析2.1 设计功能及性能分析2.2设计方案分析 二、系统的硬件设计3.1 系统设计框图系统软件设计4.1 总体介绍原理图 四、 结论 概要 现在很多学校以及家庭使用的饮水机的功能都是比较单一的&#…

【JavaScript】事件监听、事件委托和回调函数

1. 事件监听 on 方法:box.onclick function(){},但是这种方式会被覆盖,直接使用null覆盖偶就可以实现事件的解绑。 addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的前两个参数分别为【事件类型】和【事件回调】&…

MySQL InnoDB数据存储结构

1. 数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读…

第四次pta认证P测试

第一题 试题编号: 试题名称:整数排序 时间限制: 1.0s 内存限制: 128.0MB 【问题描述】 老师给定 10 个整数的序列,要求对其重新排序。排序要求: 1.奇数在前,偶数在后; 2.奇数按从大到小排序&am…

分享68个工作总结PPT,总有一款适合您

分享68个工作总结PPT,总有一款适合您 PPT下载链接:https://pan.baidu.com/s/1juus0gmesBFxJ-5KZgSMdQ?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付…

C语言----每日五道选择题Day1

1.第一题 1、指出下列代码的缺陷&#xff08; &#xff09;【多选】 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) {if(f[i] 0)break; } A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是…

[MICROSAR Adaptive] --- autosar官方文档阅读建议

目前互联网上没有太多的 Adaptive AUTOSAR 的学习资料,官方文档是一个很不错的途径。看过官方文档才发现,目前很多关于 Adaptive AUTOSAR 的文章都是官方文档的简化翻译,不如直接看官方文档更全面深入。 1 Adaptive AUTOSAR 文档官方下载地址 https://www.autosar.org/sta…

微信小程序:实现多个按钮提交表单

效果 核心步骤 通过data-type给不同按钮进行设置&#xff0c;便于很好的区分不同按钮执行不同功能 data-type"" 完整代码 wxml <form action"" bindsubmit"formSubmit"><button style"margin-bottom:5%" data-type"pa…

SpringBoot 多组 Kafka 配置

SpringBoot 多组 Kafka 配置 单组 Kafka 配置 时隔多日&#xff0c;冒个泡吧。 场景 是 我在日常的开发过程中需要监听 kafka 的消息进行回调处理&#xff0c;但是呢&#xff0c;不同的三方服务他们用了不同的 kafka 集群&#xff0c;那么默认的 Spring 自动读取的 kafka 配…

[黑马程序员SpringBoot2]——运维实用篇

目录&#xff1a; 工程打包与运行打包插件Boot工程快速启动&#xff08;Linux版本&#xff09;临时属性配置文件4级分类自定义配置文件多环境开发(yaml版)多环境开发多文件版&#xff08;yaml版&#xff09;多环境开发多文件版&#xff08;properties版&#xff09;多环境分组…