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

如何在JavaScript中通过匹配键添加属性创建新对象数组

解决对象数组匹配并添加属性的问题

看起来你想要实现的是两个对象数组根据code匹配后,给obj1的对应项添加匹配到的obj2的id集合(逗号分隔),同时过滤掉没有匹配的项对吧?你的原代码只完成了筛选的部分,还没实现添加sid属性的逻辑,我来帮你修正一下:

修正后的代码

function mergeArrays(obj1, obj2) {
  return obj1
    .map(item => {
      // 筛选obj2中所有code与当前obj1项匹配的对象
      const matchedItems = obj2.filter(obj => obj.code === item.code);
      if (matchedItems.length > 0) {
        // 将匹配到的id提取并拼接成逗号分隔的字符串
        const sid = matchedItems.map(match => match.id).join(',');
        // 返回新对象,避免修改原数组元素
        return { ...item, sid };
      }
      return item;
    })
    // 过滤掉没有匹配项(即无sid属性)的元素
    .filter(item => 'sid' in item);
}

var obj1 = [
 { id:1, code:"item1", color:"blue" },
 { id:2, code:"item2", color: "white" },
 { id:3, code:"item3", color: "brown" }
];
var obj2 = [
 { id:1, code:"item1", stock: 10 },
 { id:3, code:"item1", stock: 20 },
 { id:2, code:"item2", stock: 20 }
];

console.log(mergeArrays(obj1, obj2));

代码说明

  • 先用map遍历obj1的每个元素,这样可以对每个元素单独处理并返回新对象(避免修改原数据)
  • 对每个obj1元素,用filter在obj2中找出所有code匹配的项,这里直接对比obj.code === item.code比你原代码里的Object.values(obj).includes(code)更高效精准,因为我们明确知道要匹配的是code键
  • 如果找到匹配项,就提取这些项的id,用join(',')拼成逗号分隔的字符串,再通过对象展开运算符{ ...item, sid }添加sid属性
  • 最后用filter移除那些没有sid属性的元素(也就是在obj2中找不到匹配code的项)

运行这段代码后,就能得到你预期的输出:

[
 { id:1, code:"item1", color:"blue", sid: "1,3" },
 { id:2, code:"item2", color: "white", sid: "2" }
]

(注:这里sid是字符串类型,符合你预期的逗号分隔格式;如果需要数字数组类型,可以去掉join(',')直接保留数组)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:17:49