javascript - 按值合并 2 个 JS 对象数组

标签 javascript arrays merge

问题

我有两个 Javascript 对象数组需要合并。我需要通过匹配每个数组中包含的单个键:值对的唯一值来进行合并。我要合并的值的键是不同的

我想根据匹配的唯一值将数组 2 中的键值对添加到数组 1 中的正确对象。 array1.user 和 array2._id 的值是我需要匹配的值。

数组

const array1 = [ { _id: 5c6c7132f9bf4bdab9c906ff,
    user: 5c65d9438e4a834c8e85dd7d },
  { _id: 5c6ccd6d3a0dc4e4951c2bee,
    user: 5c65d9438e4a834c8e85dd7e } ]

const array2 = users [ { _id: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } },
  { _id: 5c65d9438e4a834c8e85dd7e,
    info: { name: 'Paneer', city: 'San Fran' } } ]

我尝试过的

我试过像这样使用 lodash 的 _.map 和 _.extend 函数,但我是 lodash 的新手,它没有给我正确的输出

  const mergedArray = _.map(array1, function(item){
    return _.extend(item, _.find(array2, {_id: item.user}));
  });

结果

mergedArray [ { _id: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } },
  { _id: 5c65d9438e4a834c8e85dd7e,
    info: { name: 'Paneer', city: 'San Fran' } }]

期望的结果

const mergedArray = [ { _id: 5c6c7132f9bf4bdab9c906ff,
    user: 5c65d9438e4a834c8e85dd7d,
    info: { name: 'John', city: 'New York' } } ,
  { _id: 5c6ccd6d3a0dc4e4951c2bee,
    user: 5c65d9438e4a834c8e85dd7e, 
    info: { name: 'Paneer', city: 'San Fran' } } ]

最佳答案

您可以使用 mapfind

如果你的数组映射顺序相同,你可以避免使用 find

const array1 = [ { _id: `5c6c7132f9bf4bdab9c906ff`,user: `5c65d9438e4a834c8e85dd7d` },{ _id: `5c6ccd6d3a0dc4e4951c2bee`,user: `5c65d9438e4a834c8e85dd7e` }]
const array2 =[ { _id: `5c65d9438e4a834c8e85dd7d`,info: { name: 'John', city: 'New York' } },{ _id: `5c65d9438e4a834c8e85dd7e`,info: { name: 'Paneer', city: 'San Fran' } } ]
    
const final = array1.map(e=> {
  const found = array2.find(({_id}) => e.user === _id)
  return {
    ...e,
    info : found.info
  }
})

console.log(final)

关于javascript - 按值合并 2 个 JS 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55667050/

相关文章:

C# - 合并集合问题

ios - 更改assetVideoTrack的preferredTransform以解决合并视频时的镜像问题

javascript - 如果 Inputs 上有值,则移除 Disable 属性

javascript - 如何在另一个 html 文件中的表单中使用一个 html 文件中表中的值

带名字的 JavaScript 字典

javascript - 可折叠内容未显示,可能是由于脚本所致

创建一个关于内存泄漏的安全空指针

java - 返回重新排序的数组

c - 该程序不打印C语言数组

mysql 合并特定行