【问题标题】:How can I merge and match 2 separate objects?如何合并和匹配 2 个单独的对象?
【发布时间】:2019-11-13 11:47:14
【问题描述】:

我想要什么

我有 2 个不同的 Java 脚本数组/对象,但具有 匹配的 ID。我想将它们合并到一个新对象中。因此,主要对象数据和辅助对象中的任何匹配元素都会合并为组合结果。

我尝试了什么

我尝试使用Object.assign() 函数但没有成功。

给定输入

示例代码,所以我有 2 个单独的对象(mainlines):

let main = [
    {
        "Id": "1",
        "Name": "Testing data"
    }
]

let lines = [
    {
        "OtherId": "1",
        "code": "AU-29830"
    },
    {
        "OtherId": "1",
        "code": "AU-29854-Single"
    },
    {
        "OtherId": "1",
        "code": "TV-BB21084623"
    },
    {
        "OtherId": "2",
        "code": "Don't Merge"
    },
    {
        "OtherId": "3",
        "code": "Don't Merge"
    }
]

预期输出

我想合并这 2 个数组,因此输出应该是一个 单个数组,其中包含 merged main-object。这个合并的主对象应该包含自己的原始内容加上嵌套的过滤 辅助数组(只包含匹配的对象)。过滤是使用 主数组对象 中的 id 完成的,该对象必须与 的每个对象匹配(略有偏差 id) >二级数组.

生成的数组应如下所示:

let result = [
   {
        "Id": "1",
        "Name": "Testing data",
        "lines": [
            {
                "OtherId": "1",
                "ProductCode": "AU-29830"
            },
            {
                "OtherId": "1",
                "ProductCode": "AU-29854-Single"
            },
            {
                "OtherId": "1",
                "ProductCode": "TV-BB21084623"
            }
        ]
    }
]

【问题讨论】:

  • 您提供了输入和输出,并非常详细地描述了您的要求。为了表示感谢,我重新格式化并重写了一点。只有你试图解决它,一些伪代码丢失。因此,我们没有可以指导您找到解决方案的起点。请添加minimal reproducible example

标签: javascript join javascript-objects array-merge


【解决方案1】:

由于您的 main 是一个数组,我假设您最终可能会在其中包含多个主要项目。如果是这样,这是一种将您的 line 项目合并到每个项目上的方法:

const mergedMainItems = 
    main.map(mainItem=>({
        ...mainItem, 
        lines: lines.filter(line=>mainItem["Id"] === line["OtherId"])
    }))

【讨论】:

  • 简洁的解决方案!无论如何,由于 OP 很难自己描述所需的转换步骤并且您假设上下文,因此最好添加一些步骤说明导致您的解决方案。
【解决方案2】:

我认为对于这个例子,这会起作用:

let result = [];
result.push({...main[0]}); //or even result.push(main[0])
result[0].lines = [];
for(let l in lines){
  if(lines[l].code != "Don't Merge"){
    result[0].lines.push({OtherId: lines[l].OtherId, ProductCode: lines[l].code})
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2022-11-24
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多