【问题标题】:How to merge 2 jsons based on same value?如何基于相同的值合并 2 个 json?
【发布时间】:2020-04-21 13:13:35
【问题描述】:

我正在使用 Angular 材质树控件,并希望在设置之前合并 2 个 json。我想根据 m_id 合并它们,删除重复项并根据 sort_id 值对节点内的对象进行排序。我尝试查看其他线程中提出的解决方案,但没有发现它们适用于深层结构。任何帮助/指导将不胜感激。

例如:

JSON1:

var json1 = {
data: [{
        name: "Node 1",
        m_id: "node1",
        sort_id: 9,
        children: [{
                name: "Node 1_1",
                m_id: "node1_1",
                sort_id: 6,
                children: [{
                        name: "Node 1_1_1",
                        m_id: "node1_1_1",
                        sort_id: 9,
                        children: []
                    },
                    {
                        name: "Node 1_1_2",
                        m_id: "node1_1_2",
                        sort_id: 2,
                        children: []
                    }
                ]
            },
            {
                name: "Node 1_2",
                m_id: "node1_2",
                sort_id: 3,
                children: [{
                        name: "Node 1_2_1",
                        m_id: "node1_2_1",
                        sort_id: 1,
                        children: []
                    },
                    {
                        name: "Node 1_2_2",
                        m_id: "node1_2_2",
                        sort_id: 5,
                        children: []
                    }
                ]
            }
        ]
    },
    {
        name: "Node 2",
        m_id: "node2",
        sort_id: 6,
        children: [{
                name: "Node 2_1",
                m_id: "node2_1",
                sort_id: 3,
                children: []
            },
            {
                name: "Node 2_2",
                m_id: "node2_2",
                sort_id: 2,
                children: []
            }
        ]
    }
]};

JSON2:

var json2 = {
    data: [{
            name: "Node 1",
            m_id: "node1",
            sort_id: 9,
            children: [{
                    name: "Node 1_1",
                    m_id: "node1_1",
                    sort_id: 6,
                    children: [{
                            name: "Node 1_1_1",
                            m_id: "node1_1_1",
                            sort_id: 9,
                            children: []
                        },
                        {
                            name: "Node 1_1_3",
                            m_id: "node1_1_3",
                            sort_id: 5,
                            children: []
                        }
                    ]
                },
                {
                    name: "Node 1_2",
                    m_id: "node1_2",
                    sort_id: 3,
                    children: [{
                            name: "Node 1_2_1",
                            m_id: "node1_2_1",
                            sort_id: 1,
                            children: []
                        },
                        {
                            name: "Node 1_2_2",
                            m_id: "node1_2_2",
                            sort_id: 5,
                            children: []
                        },
                        {
                            name: "Node 1_2_3",
                            m_id: "node1_2_3",
                            sort_id: 7,
                            children: []
                        }
                    ]
                }
            ]
        },
        {
            name: "Node 4",
            m_id: "node4",
            sort_id: 8,
            children: [{
                    name: "Node 4_1",
                    m_id: "node4_1",
                    sort_id: 4,
                    children: []
                },
                {
                    name: "Node 4_2",
                    m_id: "node4_2",
                    sort_id: 1,
                    children: []
                }
            ]
        }
    ]
};

【问题讨论】:

  • 自己试一试,您将不得不比较两个数组并检查是否存在具有相同 id 的元素。如果没有,则将其推送到结果数组中。如果是,则递归检查这些元素的子元素,直到找到非重复元素。

标签: javascript json angular typescript tree


【解决方案1】:

可能通过使用像 lodash 这样的库。

只需解析json,然后使用https://lodash.com/docs/#merge

【讨论】:

  • 合并没有成功。我没有得到预期的输出。此外,尝试 var merge = _.merge( _.keyBy(json1, "m_id"), _.keyBy(json2, "m_id") ); var values = _.values(合并); console.log(values);
  • @johnk1 也许您可以在 codesandbox.io 或类似网站中做一个示例,以便其他人可以以此为起点更快地获得答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
相关资源
最近更新 更多