JavaScript中按键去重数组对象并累加对应值的实现
解决JavaScript对象数组合并相同键并累加值的问题
问题描述
现有如下JavaScript对象数组:
const array = [ { 10205: 2 }, { 10207: 3 }, { 10205: 2 }, { 10207: 1 } ];
需要将其转换为:
[ { 10205: 4 }, { 10207: 4 } ]
即合并所有键相同的对象,将对应的值累加,最终得到每个唯一键对应一个对象的数组。
解决方案
可以通过临时对象统计累加值再转换为目标格式的方式实现,代码如下:
const array = [ { 10205: 2 }, { 10207: 3 }, { 10205: 2 }, { 10207: 1 } ]; // 1. 用reduce统计每个键的累加总和 const sumMap = array.reduce((acc, currentObj) => { // 获取当前对象的唯一键 const key = Object.keys(currentObj)[0]; // 累加值:如果键已存在则加当前值,否则从0开始加 acc[key] = (acc[key] || 0) + currentObj[key]; return acc; }, {}); // 2. 将统计结果转换为目标数组格式 const mergedArray = Object.entries(sumMap).map(([key, value]) => ({ [key]: value })); console.log(mergedArray);
代码逻辑说明
reduce统计阶段:遍历原数组,每次取出单个对象的键,把对应的值累加到临时对象sumMap中,最终sumMap会存储每个键的总累加值(比如{ 10205: 4, 10207: 4 })。- 转换为目标数组:用
Object.entries把sumMap拆分成键值对数组,再通过map把每个键值对转换成独立的对象,得到最终的合并数组。
内容的提问来源于stack exchange,提问作者Umar Sindhu
相关产品推荐
相关产品推荐

