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

如何合并两个对象数组并按公共字段匹配整合对应属性

实现方案

方案1:Map映射实现(数据量大时性能更优)

先将array2转为以capital为key的映射表,减少遍历次数:

// 构建capital到population的映射,数组转字符串做key避免引用比对失败
const capitalPopMap = new Map(
  array2.map(item => [item.capital.join(','), item.population])
)

const result = array1.map(item => {
  const currentCapitalKey = item.name.capital.join(',')
  const population = capitalPopMap.get(currentCapitalKey)
  // 合并属性,不修改原数组原始值
  return {
    ...item,
    name: {
      ...item.name,
      ...(population !== undefined && { population })
    }
  }
})

方案2:find方法实现(适合小数据量,匹配你之前尝试的实现思路)

你之前实现失败大概率是因为直接用===比较capital数组,数组是引用类型,值相同的不同数组比对会返回false,修正后代码如下:

const result = array1.map(item => {
  // 比对capital前先转成字符串,保证值相同就能匹配
  const match = array2.find(ele => ele.capital.join(',') === item.name.capital.join(','))
  return {
    ...item,
    name: {
      ...item.name,
      ...(match && { population: match.population })
    }
  }
})

注意事项

如果你的capital数组可能存在元素顺序不同但值一致的情况,比如["New York", "Albany"]和["Albany", "New York"]需要视为相同关联项,可以把join前的数组先做排序:item.capital.sort().join(',')。


内容的提问来源于stack exchange,提问作者Md Azadur Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:10