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

JS/TS对比对象数组 匹配相同id时为匹配项新增isConfirmed字段

问题根因

你写的filter逻辑只会返回object1中id匹配的元素子集,既不会保留未匹配的元素,也不会给匹配元素追加指定字段,和需求逻辑不符。

正确实现

这里提供两种常用实现,你可以根据是否需要修改原数组选择:

  • 方案1:直接修改原object1数组(无额外内存开销,适合允许直接改动原数据的场景)
// 先把object2的所有id存入Set,把id匹配查找的时间复杂度从O(n)降到O(1),数据量大时性能优势明显
const matchedIds = new Set(object2.map(item => item.id));

// 遍历原数组,给匹配到id的元素追加字段
object1.forEach(item => {
  if (matchedIds.has(item.id)) {
    item.isConfirmed = true;
  }
});
  • 方案2:生成全新数组,不改动原数组(适合不可变数据场景,比如前端框架状态更新)
const matchedIds = new Set(object2.map(item => item.id));
const result = object1.map(item => {
  return matchedIds.has(item.id)
    ? { ...item, isConfirmed: true }
    : item
});
TS类型适配

如果TS编译提示属性不存在,可以给数组元素的类型补充可选字段声明:

interface AreaItem {
  id: number;
  city: string;
  isConfirmed?: boolean; // 可选字段,兼容追加属性后的结构
}
运行结果

用你提供的原始数据运行上述代码,输出结构和期望完全一致:

[
  {
    "id": 10691,
    "city": "Morris",
    "isConfirmed": true
  },
  {
    "id": 10692,
    "city": "NY"
  }
]

内容的提问来源于stack exchange,提问作者Diya Agastya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:45:33