You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:05:33