首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历递归json树和合并

遍历递归json树和合并
EN

Stack Overflow用户
提问于 2016-04-30 13:48:46
回答 1查看 755关注 0票数 1

我试图遍历递归的json树,如下所示(json2),如果标识符匹配如下,则与另一个json (json)合并。请注意,每当对象可用时,它可能具有对象 object ,但是标识符在同一对象层次结构中的任何形式。

注意:标识符值总是唯一的。

我已经浏览了underscore.js库,但是找不到符合这个要求的任何函数。在正常的list情况下,findWhere足以解决问题,但情况并非如此,因为它有多个层次结构。

JSON 2:

代码语言:javascript
复制
{
    "identifier1": "123456",
    "identifier2": "234567"
}

JSON 1:

代码语言:javascript
复制
{
    subtopic: [
        {
            "title": "title 1",
            "subtitle": "title 2",
            "objects": [{
                "title": "123"
                "label": "456"
                "objects": [
                    {
                        "identifier": "identifier1",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    },
                    {
                        "identifier": "identifier2",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    }
                ]
            }]
        },
        {
            ...
            ...
            Similar as above
        },
    ]
}

合并后

代码语言:javascript
复制
{
    subtopic: [
        {
            "title": "title 1",
            "subtitle": "title 2",
            "objects": [{
                "title": "123"
                "label": "456"
                "objects": [
                    {
                        "result": "123456",
                        "identifier": "identifier1",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    },
                    {
                        "result": "234567"
                        "identifier": "identifier2",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    }
                ]
            }]
        },
        {
            ...
            ...
            Similar as above
        },
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 14:13:08

至少您需要一些迭代和递归样式来获得正确的内部对象来设置新属性。

代码语言:javascript
复制
function merge(array, object) {
    Object.keys(object).forEach(function (k) {
        function iter(a) {
            if (a.identifier === k) {
                r = a;
                return true;
            }
            return Array.isArray(a.objects) && a.objects.some(iter);
        }

        var r;
        array.some(iter);                            
        if (r) {
            r.result = object[k];
        }
    });
}

var object2 = { "identifier1": "123456", "identifier2": "234567" },
    object1 = { subtopic: [{ "title": "title 1", "subtitle": "title 2", "objects": [{ "title": "123", "label": "456", "objects": [{ "identifier": "identifier1", "object": { "object-1": "123", "object-2": "456" } }, { "identifier": "identifier2", "object": { "object-1": "123", "object-2": "456" } }] }] }] };

merge(object1.subtopic, object2);
document.write('<pre>' + JSON.stringify(object1, 0, 4) + '</pre>');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36955685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档