Node.js数组对象元素添加问题:重复name无法正确处理
解决Node.js数组对象添加字段时重复name条目被覆盖的问题
问题分析
你的代码错误地使用以name为键的对象posRes聚合元素,导致相同name的后续条目直接覆盖之前的,最终只保留每个name的最后一条数据,无法满足保留所有原条目的需求。
修正后的代码
let arrayObject = [ { name: "l2k", killPoint: 10 }, { name: "l2kb", killPoint: 6 }, { name: "gd", killPoint: 0 }, { name: "l2kb", killPoint: 5 }, { name: "gd", killPoint: 0 }, { name: "l2k", killPoint: 4 }, { name: "gd", killPoint: 0 }, { name: "l2k", killPoint: 1 }, ]; let winCount = [1, 0, 0, 0, 0, 0]; let pointsystem = [12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0]; const positionAdd = (objects) => { // 遍历原数组,为每个元素添加对应字段,保留所有条目 return objects.map((item, index) => ({ ...item, // 复制原元素的所有属性 win: winCount[index] || 0, positionPoint: pointsystem[index] || 0 })); }; console.log(positionAdd(arrayObject));
输出结果
运行上述代码后,会得到你期望的输出:
[ { name: "l2k", win: 1, positionPoint: 12, killPoint: 10 }, { name: "l2kb", win: 0, positionPoint: 9, killPoint: 6 }, { name: "gd", win: 0, positionPoint: 8, killPoint: 0 }, { name: "l2kb", win: 0, positionPoint: 7, killPoint: 5 }, { name: "gd", win: 0, positionPoint: 6, killPoint: 0 }, { name: "l2k", win: 0, positionPoint: 5, killPoint: 4 }, { name: "gd", win: 0, positionPoint: 4, killPoint: 0 }, { name: "l2k", win: 0, positionPoint: 3, killPoint: 1 }, ]
核心思路
- 放弃对象聚合的方式,直接使用
Array.map()遍历原数组的每一个元素 - 利用遍历的索引
index,从winCount和pointsystem数组中取出对应位置的值 - 通过对象展开运算符
...item保留原元素的所有属性,再添加上win和positionPoint字段生成新对象
内容的提问来源于stack exchange,提问作者Siyam Hosan
相关产品推荐
相关产品推荐

