[英]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.