Javascript 遍历递归json树并合并

Javascript 遍历递归json树并合并,javascript,jquery,json,recursion,Javascript,Jquery,Json,Recursion,我试图遍历递归json树,如下所示(json2),如果标识符匹配,则与另一个json(json)合并,如下所示。请注意,只要有可用的对象,它可能有对象或对象,但标识符在同一对象层次结构中的任何方式 注意:标识符值始终是唯一的 我已经浏览了underline.js库,但找不到任何符合此要求的函数。在正常的列表情况下,findWhere就足以解决问题,但事实并非如此,因为它有多个层次结构 JSON 2: { "identifier1": "123456", "identifier2"

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

注意:标识符值始终是唯一的

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

JSON 2:

{
    "identifier1": "123456",
    "identifier2": "234567"
}
JSON 1:

{
    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
        },
    ]
}
合并后

{
    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
        },
    ]
}

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

函数合并(数组、对象){
Object.keys(对象).forEach(函数(k){
功能iter(a){
如果(a.标识符===k){
r=a;
返回true;
}
返回Array.isArray(a.objects)和&a.objects.some(iter);
}
var-r;
一些(国际热核实验堆);
if(r){
r、 结果=对象[k];
}
});
}
var object2={“identifier1”:“123456”,“identifier2”:“234567”},
object1={副标题:[{“title”:“title 1”,“subtitle”:“title 2”,“objects”:[{“title”:“123”,“label”:“456”,“objects”:[{“identifier”:“identifier1”,“object”:“identifier”:“identifier”:“123”,“object-2”:“456”}}},{“identifier”:“identifier”:“identifier 2”,“object;
合并(object1.subtopic,object2);
document.write(''+JSON.stringify(object1,0,4)+'')