【问题标题】:Json merge left or right TypescriptJson 向左或向右合并打字稿
【发布时间】:2020-02-01 01:21:13
【问题描述】:

如何合并 Json 对象,以便在合并 Json A 和 Json B 时,简单值(字符串或数字或布尔值等)在键匹配时被覆盖,但当复杂值(数组和对象合并)存在时那么有两种结果。 1.)如果是简单的字符串数组,则合并字符串,如果是对象,则适用递归解决方案。 2.) 如果是对象,则适用递归解决方案。

这是预期的输出。 我尝试了各种 npm 包,但仍在寻找完美的解决方案。

const A = {
    Results: [
        {
            PgId: "pg1",
            Entities: [
                {
                    EntityName: "Customer",
                    Subjects: [
                        {
                            first_name: "Mark",
                            last_name: "woodruff",
                            location: "tenino"
                        },
                        {
                            first_name: "helen1",
                            last_name: "mclean1",
                            location: "washington1"
                        }
                    ]
                }
            ]
        }
    ],
    pets: ['Cat', 'Parrot'],
    isComplete: false
}

const B = {
    Results: [
        {
            PgId: "pg1",
            Entities: [
                {
                    EntityName: "Customer",
                    Subjects: [
                        {
                            first_name: "Mark",
                            last_name: "woodruff",
                            location: "tenino"
                        },
                        {
                            first_name: "helen",
                            last_name: "mclean",
                            location: "washington"
                        }
                    ]
                }
            ]
        }
    ],
    pets: ['Dog'],
    isComplete: true
}

输出:

    const mergedBA_B_overrides_A = {
    Results: [
        {
            PgId: "pg1",
            Entities: [
                {
                    EntityName: "Customer",
                    Subjects: [
                        {
                            first_name: "Mark",
                            last_name: "woodruff",
                            location: "tenino"
                        },
                        {
                            first_name: "helen",
                            last_name: "mclean",
                            location: "washington"
                        },
                        {
                            first_name: "helen1",
                            last_name: "mclean1",
                            location: "washington"
                        }
                    ]
                }
            ]
        }
    ],
    pets: ['Dog','Cat', 'Parrot'],
    isComplete: true
}

【问题讨论】:

  • 查看“深度合并”的搜索结果。您甚至可能需要编写自己的自定义合并函数来执行诸如合并来自两个数组的所有值之类的事情(例如,如果两个数组具有相同的值,您是否保留两者?如果两个数组包含对象,您是否进行深度比较对象?)。

标签: javascript json typescript


【解决方案1】:

您必须递归地遍历对象的属性,用目标值覆盖源值。

如果您对“github gist javascript mergeeep”进行搜索引擎查询,则有以下解决方案:

您可能必须谨慎使用该解决方案将数组中的值合并。如果你想这样做,你可能必须包含一些东西来处理数组和对象,就像这个明显的解决方案:

我使用了与这两种类似的解决方案。

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多