简体   繁体   English

如何在Javascript中动态使用子对象值查找父JSON对象值?

[英]How to find the parent JSON object vaue using the child object value dynamically in Javascript?

var obj = [
{
    "name": "A1",
    "children": [
        {
            "name": "A1-level1-child1",
            "children": [
                {
                    "name": "A1-level2-child1",
                    "children": [
                        {
                            "name": "A1-level3-child1",
                            "children": []
                        },
                        {
                            "name": "A1-level3-child2",
                            "children": []
                        }
                    ]
                }
            ]
        },
        {
            "name": "A2-level1-child1",
            "children": []
        }
    ]   
},
{
    "name": "B1",
    "children": [
    ]   
}

]; ];

From the above JSON object, if i check the value "A1-level3-child1", the function should give me its parent name as "A1-level2-child1".从上面的 JSON 对象中,如果我检查值“A1-level3-child1”,该函数应该给我它的父名称为“A1-level2-child1”。 Same way, if i check for "A2-level1-child1",then it should be give me the parent value as "A1".同样,如果我检查“A2-level1-child1”,那么它应该给我父值“A1”。

GoGo this code. GoGo 这段代码。

var parentMap = {}
function getParentMap(arr, parent) {
    if (!(arr instanceof Array)) {
        return;
    }

    for (o of arr) {
        parentMap[o.name] = parent;
        if (o.children && o.children.length) {
            getParentMap(o.children, o);
            //getParentMap(o.children, o.name);
        }
    }
}

var arr = [{
    "name": "A1",
    "children": [{
            "name": "A1-level1-child1",
            "children": [{
                "name": "A1-level2-child1",
                "children": [{
                        "name": "A1-level3-child1",
                        "children": []
                    },
                    {
                        "name": "A1-level3-child2",
                        "children": []
                    }
                ]
            }]
        },
        {
            "name": "A2-level1-child1",
            "children": []
        }
    ]
},
{
    "name": "B1",
    "children": []
}];

getParentMap(obj, null);
parentMap["A1-level3-child1"].name

如果你能重新定义这个结构,你就可以在每个节点上添加'parent',这样更容易操作。

You could iterate the array or children and use a short circuit if the node is found.如果找到节点,您可以迭代数组或子项并使用短路。

 function getParentName(array, name, parent = 'root') { var result; array.some(o => result = o.name === name && parent || o.children && getParentName(o.children, name, o.name)); return result; } var array = [{ name: "A1", children: [{ name: "A1-level1-child1", children: [{ name: "A1-level2-child1", children: [{ name: "A1-level3-child1", children: [] }, { name: "A1-level3-child2", children: [] }] }] }, { name: "A2-level1-child1", children: [] }] }, { name: "B1", children: [] }]; console.log(getParentName(array, "A1-level3-child1")); // A1-level2-child1 console.log(getParentName(array, "A2-level1-child1")); // A1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM