当前位置: 首页 > java >正文

js reduce累加器

reduce() 是 JavaScript 数组的一个高阶函数,用于将数组元素通过一个 reducer 函数累积计算为单个值。

基本语法

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

参数说明
callback - 执行数组中每个值的函数,包含四个参数:

accumulator (acc) - 累积器,累积回调的返回值

currentValue (cur) - 数组中正在处理的当前元素

currentIndex (idx) - 可选,数组中正在处理的当前元素的索引

sourceArray (src) - 可选,调用 reduce() 的数组

initialValue - 可选,作为第一次调用 callback 函数时的第一个参数的值。如果没有提供初始值,则将使用数组中的第一个元素。

工作原理

  1. 如果没有提供 initialValue,reduce 会从索引 1 开始执行 callback 方法,跳过第一个索引。如果提供 initialValue,从索引 0 开始。

  2. 如果数组为空且没有提供 initialValue,会抛出 TypeError。

  3. 如果数组仅有一个元素且没有提供 initialValue,或者提供了 initialValue 但数组为空,则直接返回该唯一值或 initialValue,不会执行 callback。

实例:

  1. 数组求和
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 10
  1. 数组求积
const numbers = [1, 2, 3, 4];
const product = numbers.reduce((acc, cur) => acc * cur, 1);
console.log(product); // 24
  1. 扁平化二维数组
const flattened = [[0, 1], [2, 3], [4, 5]].reduce((acc, cur) => acc.concat(cur),[]
);
console.log(flattened); // [0, 1, 2, 3, 4, 5]
  1. 统计字符出现次数
const letters = ['a', 'b', 'a', 'c', 'b', 'a'];
const count = letters.reduce((acc, cur) => {acc[cur] = (acc[cur] || 0) + 1;return acc;
}, {});
console.log(count); // { a: 3, b: 2, c: 1 }
  1. 按属性对对象分类
const people = [{ name: 'Alice', age: 21 },{ name: 'Bob', age: 20 },{ name: 'Charlie', age: 21 }
];const groupedByAge = people.reduce((acc, person) => {const age = person.age;if (!acc[age]) {acc[age] = [];}acc[age].push(person);return acc;
}, {});console.log(groupedByAge);
/*
{20: [{ name: 'Bob', age: 20 }],21: [{ name: 'Alice', age: 21 },{ name: 'Charlie', age: 21 }]
}
*/

注意事项
总是提供初始值 initialValue 是一个好习惯,可以避免空数组导致的错误

reduce() 不会改变原数组

对于大型数组,考虑性能问题,因为 reduce() 需要遍历整个数组

reduce() 是一个非常强大的数组方法,可以用于各种累积和转换操作,熟练掌握它能大大简化许多数据处理任务。

http://www.xdnf.cn/news/211.html

相关文章:

  • #去除知乎中“盐选”付费故事
  • @JsonView + 单一 DTO:如何实现多场景 JSON 字段动态渲染
  • 大语言模型智能体:安全挑战与应对之道
  • echarts饼图中心呈现一张图片,并且能动态旋转的效果react组件
  • 天梯赛数据结构合集
  • 51单片机实验三:数码管动态显示
  • Oracle 19c新特性:OCP认证考试与职业跃迁的关键?
  • 如何选择适合您的过程控制器?
  • VSCODE插值表达式失效问题
  • 4.18学习总结
  • CNN与VGG16的关系:从基础到经典模型的通俗解析
  • 【前沿】成像“跨界”测量——扫焦光场成像
  • 【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心
  • 2025mathorcup妈妈杯数学建模挑战赛C题:汽车风阻预测,详细思路,模型,代码更新中
  • 专精特新政策推动,B端UI设计如何赋能中小企业创新发展?
  • 使用VHDL语言实现TXT文件的读写操作
  • 【LeetCode】大厂面试算法真题回忆(61)--组装新的数组
  • 7.Rust+Axum:打造高效 RESTful API 的最佳实践
  • FastGPT安装前,系统环境准备工作?
  • AI Agent系列(十) -Data Agent(数据分析智能体)开源资源汇总
  • Qt QTimer 详解与使用指南
  • PHP最新好看UI个人引导页网页源码
  • Flash存储器(二):SPI NAND Flash与SPI NOR Flash
  • 基于linux 设置无线网卡Monitor模式 sniffer抓包
  • 经济指标学习(二)
  • 神经网络优化 - 小批量梯度下降之批量大小的选择
  • ChatGPT-o3辅助学术写作的关键词和引言效果如何?
  • 鸿蒙NEXT开发键值型数据工具类(ArkTs)
  • PyTorch快速入门
  • 《软件设计师》复习笔记(12.1)——范围管理、进度管理