如何在JavaScript中对数组内重复对象的属性值求和
解决方案:合并同类对象并累加属性值
核心实现代码
const mergeObjects = (arr) => { const resultMap = new Map(); arr.forEach(obj => { const [key, value] = Object.entries(obj)[0]; resultMap.set(key, (resultMap.get(key) || 0) + value); }); return Array.from(resultMap, ([key, value]) => ({ [key]: value })); }; // 测试示例 const laptops = [{acer: 4}, {mac: 5}, {asus: 8}, {acer: 6}, {mac: 3} ]; console.log(mergeObjects(laptops)); // 输出: [{acer: 10}, {mac: 8}, {asus: 8}]
方案说明
- 高效性:使用
Map存储中间结果,查找和更新操作的时间复杂度为O(1),整体算法时间复杂度为O(n)(n为数组长度),处理大数据量时性能表现优异。 - 通用性:完全适配同类数组结构——只要数组中每个元素是仅含单个键值对的对象,无论键名是什么、数值类型是整数还是浮点数,都能正确合并累加。
- 简洁性:利用
Object.entries快速提取对象的键值对,Array.from直接将Map转换为目标格式的数组,代码简洁易读。
边界情况处理
如果数组中存在空对象,代码会自动忽略;如果需要过滤非数字类型的数值,可以添加类型校验:
const mergeObjects = (arr) => { const resultMap = new Map(); arr.forEach(obj => { const [key, value] = Object.entries(obj)[0]; if (key && typeof value === 'number') { resultMap.set(key, (resultMap.get(key) || 0) + value); } }); return Array.from(resultMap, ([key, value]) => ({ [key]: value })); };
内容的提问来源于stack exchange,提问作者software engineer
相关产品推荐
相关产品推荐

