Swift中如何合并数组重复对象并累加对应属性值?
同名对象积分累加并去重实现方案
你可以通过临时映射表的方式实现,比嵌套循环更高效(时间复杂度O(n)),具体步骤和代码如下:
核心思路
- 用一个映射结构(对象或
Map)存储每个名字对应的总积分,利用键的唯一性自动去重 - 遍历原数组,累加同名对象的
points值 - 将映射结构转换为目标格式的数组
JavaScript 实现示例
方法一:使用普通对象作为映射表
const persons = [ { "name": "Daniel", "points": 10 }, { "name": "Ana", "points": 20 }, { "name": "Daniel", "points": 40 } ]; const pointsMap = {}; // 遍历累加积分 persons.forEach(person => { if (pointsMap[person.name]) { pointsMap[person.name] += person.points; } else { pointsMap[person.name] = person.points; } }); // 转换为目标数组 const result = Object.entries(pointsMap).map(([name, points]) => ({ name, points })); console.log(result); // 输出:[{"name":"Daniel","points":50},{"name":"Ana","points":20}]
方法二:使用Map(更适合含特殊字符的名字)
const persons = [ { "name": "Daniel", "points": 10 }, { "name": "Ana", "points": 20 }, { "name": "Daniel", "points": 40 } ]; const pointsMap = new Map(); // 遍历累加积分 persons.forEach(person => { const currentTotal = pointsMap.get(person.name) || 0; pointsMap.set(person.name, currentTotal + person.points); }); // 转换为目标数组 const result = Array.from(pointsMap, ([name, points]) => ({ name, points })); console.log(result);
优势说明
相比嵌套循环的O(n²)时间复杂度,这个方法只需要遍历原数组一次,执行效率更高,同时代码逻辑清晰,易于维护。
内容的提问来源于stack exchange,提问作者user20459409
相关产品推荐
相关产品推荐

