js中reduce在数组的使用

reduce方法用于将数组归约为单一值,通过累加器函数遍历元素,可实现求和、扁平化、统计和分组;需注意初始值设置以避免空数组报错。

js中reduce在数组的使用

在 JavaScript 中,reduce 是数组的一个高阶方法,用于将数组“归约”为一个单一的值。它通过遍历数组每个元素,执行一个累加器函数,最终返回一个结果。这个方法非常灵活,可以用来求和、拼接字符串、扁平化数组、统计对象等。

基本语法

reduce 方法接受两个参数:一个回调函数和一个可选的初始值。

array.reduce(callback(accumulator, currentValue, index, array), initialValue)accumulator:上一次调用回调函数时的返回值,或者是初始值 currentValue:当前处理的元素 index(可选):当前元素的索引 array(可选):原数组 initialValue(可选):作为第一次调用回调函数时 accumulator 的值

常见使用场景

1. 数值求和

最简单的 reduce 用法是计算数组中所有数字的总和。

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, num) => acc + num, 0);
// 结果:10

这里初始值为 0,每次把当前数字加到累加器上。

2. 数组扁平化

可以把多维数组“拍平”成一维数组。

const nested = [[1, 2], [3, 4], [5, 6]];
const flat = nested.reduce((acc, arr) => acc.concat(arr), []);
// 结果:[1, 2, 3, 4, 5, 6]

concat 方法连接每个子数组,实现扁平化。

3. 统计对象属性出现次数

常用于数据统计,比如统计单词或类别数量。

const fruits = [‘apple’, ‘banana’, ‘apple’, ‘orange’, ‘banana’, ‘apple’];
const count = fruits.reduce((acc, fruit) => {
  acc[fruit] = (acc[fruit] || 0) + 1;
  return acc;
}, {});
// 结果:{ apple: 3, banana: 2, orange: 1 }

通过对象键来记录每种水果出现的次数。

4. 按条件分组数据

可以根据某个属性对数组对象进行分组。

const people = [
  { name: ‘Alice’, age: 25 },
  { name: ‘Bob’, age: 30 },
  { name: ‘Charlie’, age: 25 }
];
const groupByAge = people.reduce((acc, person) => {
  if (!acc[person.age]) {
    acc[person.age] = [];
  }
  acc[person.age].push(person);
  return acc;
}, {});
// 结果:{ 25: […], 30: […] }

按年龄将人员分组,生成一个以年龄为键的对象。

注意事项

如果不提供初始值,reduce 会从数组第二个元素开始执行,第一个元素作为初始的 accumulator。如果数组为空且没有提供初始值,会抛出错误。

[].reduce((acc, val) => acc + val); // 报错:Reduce of empty array

因此建议在可能为空数组的情况下始终传入初始值。

基本上就这些。reduce 虽然一开始理解起来有点绕,但一旦掌握,就能写出简洁又强大的数据处理逻辑。关键是理清累加器如何一步步构建最终结果。不复杂但容易忽略。

以上就是js中reduce在数组的使用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1538204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Firebase与Google认证集成:利用凭据实现无缝用户管理
上一篇 2025年12月21日 04:48:03
js isSame判断对象是否相同
下一篇 2025年12月21日 04:48:17

相关推荐

  • Java方法重载与重写有什么区别 如何合理使用

    方法重载发生在同一类中,方法名相同但参数列表不同,用于提供多种调用方式;方法重写发生在子类继承父类时,方法名、参数列表和返回类型必须一致,用于改变父类方法的实现。 方法重载(Overload)和重写(Override)是Java中实现多态的两种重要机制,它们虽然都涉及方法名的重复使用,但应用场景和规…

    2026年9月1日
    000
  • fastjson白名单配置后仍无法反序列化LinkedCaseInsensitiveMap的原因是什么?

    Fastjson 反序列化 LinkedCaseInsensitiveMap 失败问题排查 即使在 redisConfig 中将 org.springframework.util 添加到 Fastjson 白名单,仍然无法反序列化 LinkedCaseInsensitiveMap 对象。 问题可能出…

    2026年9月1日
    000
  • 《战地》实验室13GB更新上线 支持英伟达DLSS 4、含有大逃杀文件

    《战地》实验室13GB更新上线 支持英伟达DLSS 4、含有大逃杀文件《战地》实验室13GB更新上线 支持英伟达DLSS 4、含有大逃杀文件《战地》实验室13GB更新上线 支持英伟达DLSS 4、含有大逃杀文件《战地》实验室13GB更新上线 支持英伟达DLSS 4、含有大逃杀文件

    《战地》实验室今日推出新补丁(大小为13gb),为测试版本带来了多项新功能,其中包括对英伟达dlss 4的支持。 据《战地》官方Reddit玩家反馈,几小时前上线的这次更新包含了一些调整与优化,例如新增了英伟达DLSS 4支持,并加入了允许关闭占领区域边框的选项。 除此之外,此次更新还将水印从Lab…

    2026年9月1日 用户投稿
    000
  • 探探收不到消息通知怎么办_探探消息推送设置排查

    首先检查探探通知权限是否开启,确认手机未开启勿扰模式或静音,再检查探探内消息提醒设置,确保后台刷新已启用,最后通过重启应用或设备恢复推送功能。 如果您在使用探探时发现无法接收到新消息的通知,这可能会影响您与匹配用户的及时沟通。问题通常源于应用通知权限被关闭或手机系统设置限制了后台活动。 本文运行环境…

    2026年9月1日
    100
  • 如何高效绘制高德地图轨迹并限制轨迹点和轨迹线数量?

    高德地图轨迹绘制性能优化:限制轨迹点和轨迹线数量 本文介绍如何利用高德地图API 2.0高效绘制地图轨迹,并有效控制轨迹点和轨迹线的数量,避免性能瓶颈。 我们将解决如何将地图上渲染的轨迹点和轨迹线数量限制在30个以内的问题。 初始代码使用trackpoints数组存储后台返回的经纬度数据。为了优化性…

    2026年9月1日
    000
  • Spring异步线程池堆积:如何解决任务积压及数据保存不规律问题?

    Spring异步线程池任务积压及数据保存不规律的排查与解决 您在使用Spring异步特性时,通过newScheduledThreadPool创建了一个线程池,并用scheduleWithFixedDelay方法安排任务每5秒执行一次,目标是每5秒将数据保存到Redis。然而,当线程数达到5时,任务开…

    2026年9月1日
    100
  • 苹果 Apple Arcade 7 月游戏阵容上线:《愤怒的小鸟:弹射》《王国保卫战 5:联盟 TD+》等

    苹果 Apple Arcade 7 月游戏阵容上线:《愤怒的小鸟:弹射》《王国保卫战 5:联盟 TD+》等苹果 Apple Arcade 7 月游戏阵容上线:《愤怒的小鸟:弹射》《王国保卫战 5:联盟 TD+》等苹果 Apple Arcade 7 月游戏阵容上线:《愤怒的小鸟:弹射》《王国保卫战 5:联盟 TD+》等苹果 Apple Arcade 7 月游戏阵容上线:《愤怒的小鸟:弹射》《王国保卫战 5:联盟 TD+》等

    7 月 4 日消息,苹果公司宣布 apple arcade 最新 7 月游戏阵容正式上线,此次更新包括 rovio 推出的《愤怒的小鸟》系列新作《愤怒的小鸟:弹射(angry birds bounce)》,ironhide game studio 打造的《王国保卫战 5:联盟 td+(kingdom…

    2026年9月1日 用户投稿
    000
  • win10闪退软件打不开解决方法

    win10闪退软件打不开解决方法win10闪退软件打不开解决方法win10闪退软件打不开解决方法win10闪退软件打不开解决方法

    我们在使用windows 10系统时,如果遇到程序突然退出无法打开的情况,这可能与该程序本身有关,此时可以尝试卸载后重新安装。不过,如果所有程序都出现类似问题,则很可能是系统出现了故障,这时可以先考虑重置系统,若仍无效,建议重装系统。 Windows 10程序闪退无法打开解决办法 如果只是某个程序闪…

    2026年9月1日 用户投稿
    500
  • 标题: 如何使用 Composer 解决分布式锁问题

    可以通过以下地址学习 composer:学习地址 在开发一个高并发的电商平台时,我遇到了一个棘手的问题:如何在多台服务器之间确保订单处理的互斥性。最初,我们尝试使用简单的数据库锁,但这种方法在高并发情况下表现不佳,常常导致死锁和性能瓶颈。经过一番研究,我决定采用分布式锁来解决这个问题。 遇到的困难 …

    用户投稿 2026年9月1日
    100
  • Java Stream.flatMap方法处理嵌套集合

    flatMap可将嵌套集合展平为单一流,通过将每个元素转换为流并合并结果,实现一对多映射。例如,二维字符串列表经flatMap处理后得到单一字符串列表;在对象集合中,如学生含课程列表,可通过flatMap提取所有课程并去重;对于多层结构(学校→班级→学生→课程),可连续使用flatMap逐层展开,最…

    2026年9月1日
    200
  • 货拉拉司机版怎样接单后导航到取货点_货拉拉司机版导航功能的集成使用教程

    1、接单后进入订单详情页核对取货地址;2、点击“导航到取货地”启动内置导航;3、可切换地图引擎优化路线准确性;4、提前下载离线地图应对无网环境。 如果您已经成功接下货拉拉订单,但不清楚如何快速启动导航前往取货地点,可以通过货拉拉司机版内置的导航功能实现精准路线规划。以下是具体操作步骤: 一、确认订单…

    2026年9月1日
    000
  • VSCode标签怎么自动补齐_VSCodeHTML/XML标签自动补全设置教程

    答案:VSCode中HTML/XML标签自动补齐失效通常由Emmet未启用、文件类型识别错误或设置冲突导致。需检查emmet.triggerCharacters和editor.quickSuggestions设置,确认文件语言模式正确,并确保emmet.includeLanguages配置合理。同时…

    2026年9月1日
    100
  • 饿了么神券领取入口_饿了么神券领取详细步骤

    若无法找到饿了么神券入口,可通过六种方式领取:一、在APP内“优惠券中心”每日签到领红包;二、搜索「本地宝」获取店铺叠加券;三、使用「词令」输入「外卖96」跳转领券;四、支付宝会员每周三抢购餐饮券;五、参与地区消费券活动,如搜索「北仑消费券」;六、邀请好友或组队游戏赢无门槛红包。 如果您尝试在饿了么…

    2026年9月1日
    000
  • 智能物联网关供应商排名:哪家的工业智能网关设备好用?

    智能物联网关供应商排名:哪家的工业智能网关设备好用?智能物联网关供应商排名:哪家的工业智能网关设备好用?智能物联网关供应商排名:哪家的工业智能网关设备好用?智能物联网关供应商排名:哪家的工业智能网关设备好用?

    在工业领域,智能网关作为连接现场设备与云端或企业管理系统的枢纽,将各类设备紧密串联,堪称智能工厂的“核心控制器”。它不仅确保数据稳定传输,还需具备高效处理和安全保障能力。 当前市场上,物联网智能网关供应商众多,技术路径各有侧重。以下列举几家在该领域表现优异的企业供参考(排名不分先后): 一、华为 凭…

    2026年9月1日 用户投稿
    300
  • 如何使用Dagger和Retrofit在运行时动态添加身份验证头?

    Dagger 和 Retrofit 运行时动态添加身份验证头部 本文探讨如何在 Dagger 和 Retrofit 中动态添加身份验证头部。 当需要基于更新后的令牌创建 Retrofit 实例时,有多种方法可供选择。 利用依赖注入范围 (Scope) 通过自定义 Scope,您可以控制 Retrof…

    2026年9月1日
    200
  • 首个基于统计学的线性注意力机制ToST,高分拿下ICLR Spotlight

    首个基于统计学的线性注意力机制ToST,高分拿下ICLR Spotlight首个基于统计学的线性注意力机制ToST,高分拿下ICLR Spotlight首个基于统计学的线性注意力机制ToST,高分拿下ICLR Spotlight首个基于统计学的线性注意力机制ToST,高分拿下ICLR Spotlight

    加州大学伯克利分校吴梓阳博士及其团队提出了一种新型transformer架构——token statistics transformer (tost),其核心是线性时间复杂度的注意力机制。这项研究成果已发表在iclr 2025,并被选为spotlight论文。马毅教授将在今年四月iclr大会上进行主…

    2026年9月1日 用户投稿
    300
  • ROS1/2机器人之从命令调用到程序编写

    难度级别: 容易☞命令调用 困难☞程序编写 命令调用简单案例 ROS1: rosrun package-name executable-name ROS2: ros2 run package-name executable-name 比如启动键盘遥控turtlesim ROS1: 大多数 ROS1 …

    2026年9月1日
    100
  • 云闪付怎么给手机号充话费_云闪付话费充值操作指南

    答案:可通过首页入口、更多服务或搜索功能在云闪付充值话费。打开APP后,选择“手机充值”图标,输入号码与金额并支付;或通过“更多”中的“充值缴费”进入操作;也可直接搜索“话费充值”快速跳转,确认信息后完成付款。 如果您想为自己的手机号快速充值话费,但不确定如何在云闪付中完成操作,可以通过以下多种方式…

    2026年9月1日
    000
  • 3.0结婚时代:新婚恋模式

    3.0结婚时代:新婚恋模式3.0结婚时代:新婚恋模式3.0结婚时代:新婚恋模式3.0结婚时代:新婚恋模式

    在信息高速更迭的当下,各个行业都在经历深刻变革,服务领域同样如此。婚庆行业的转型升级尤为显著。从以往由父母主导的传统婚嫁形式,逐渐转向新人主动参与、追求个性表达的新趋势,婚礼服务正步入一个崭新阶段。以久囍结婚为代表的一站式服务平台,正在推动婚庆行业迈入服务更完善、体验更流畅的3.0时代。 1、 婚姻…

    2026年9月1日 用户投稿
    600
  • Swagger文档如何区分API新增和更新场景的参数要求?

    Swagger文档参数注释如何区分API新增和更新场景? 在设计RESTful API时,新增和更新操作对参数的要求往往不同。本文探讨如何在Swagger文档中清晰地表达这种差异。 考虑一个包含create和update方法的API控制器,以及User对象: void create(@Validat…

    2026年9月1日
    100

发表回复

登录后才能评论
关注微信