【问题标题】:How do I merge objects on two different arrays to one如何将两个不同数组上的对象合并为一个
【发布时间】:2023-01-14 09:25:01
【问题描述】:

我想将两个具有不同对象的数组合并在一起。每个数组中有两个具有不同对象的数组。我想输出一个数组,每个数组中的对象组合成一个大数组。

var a = [
    {
        id: 1,
        name: "john"
    },
    {
        id: 2,
        name: "caleb"
    }
]

var b = [
    {
        id: 1,
        age: 12
    },
    {
        id: 2,
        name: 20
    }
]


var result = [
    {
        id: 1,
        name: "john",
        age: 12
    },
    {
        id: 2,
        name: "caleb",
        age: 20
    }
]

【问题讨论】:

  • 有两个不同的问题:按 ID 聚合对象(至少看起来是这样),以及实际的连接。如果我这样做,我的第一步是创建一个 id => object 的对象/Map,然后将第二个数组的 propert[y|ies] 合并到其中,然后取值。有很多方法可以实现——您尝试过哪些方法不起作用?
  • 嗨,詹姆斯,欢迎,这似乎是一个非常简单琐碎的解决方案,到目前为止,您至少尝试过任何东西但都失败了吗? SO 的 ppl 喜欢帮助解决 ppl 遇到的问题,而不是真的白写其他代码,尝试使用一些 for 循环和一些 if 语句

标签: javascript arrays sorting merge


【解决方案1】:

您可以使用Array.reduce() 将项目按id 分组。

这会为每个 id 创建一个具有属性的映射对象,然后我们可以使用 Object.values() 将结果作为数组获取。

var a = [ { id: 1, name: "john" }, { id: 2, name: "caleb" } ]
var b = [ { id: 1, age: 12 }, { id: 2, age: 20 } ]

const result = Object.values([...a, ...b].reduce((acc, { id, ...obj}) => { 
    acc[id] = acc[id] || { id };
    acc[id] = { ...acc[id], ...obj };
    return acc
}, {}))

console.log(result)
.as-console-wrapper { max-height: 100% !important; }

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2021-01-18
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2021-07-27
    • 2020-03-29
    • 2019-09-08
    相关资源
    最近更新 更多