我有一个json对象,如下所示。
[{
"data":{
"title":"Root"
},
"attr":{
"id":1,
"parentId":0
},
"state":"open",
"children":[{
"data":{
"title":"Stem"
},
"attr":{
"id":11,
"parentId":1
},
"state":"open",
"children":[{
"data":{
"title":"Branch 1"
},
"attr":{
"id":111,
"parentId":11
},
"state":"open",
"children":[{
"data":{
"title":"Sub Branch 1"
},
"attr":{
"id":1111,
"parentId":111
},
"state":"open",
"children":[{
"data":{
"title":"Leaf"
},
"attr":{
"id":111111,
"parentId":111
}
}]
},
{
"data":{
"title":"Sub Branch 2"
},
"attr":{
"id":111111,
"parentId":111
}
}
]
},
{
"data":{
"title":"Branch 2"
},
"attr":{
"id":119,
"parentId":11
},
"state":"open",
"children":[{
"data":{
"title":"Sub branch"
},
"attr":{
"id":120,
"parentId":119
}
}
]
}
]
}
]
}]
基本上结构看起来像这样
我有属性(attr)中所有节点的ID。 当给出任何节点的ID时,我想得到该节点及其子节点的json。
例如。如果给定的ID为111,那么这个及其孩子的json将是
{
"data":{
"title":"Branch 1"
},
"attr":{
"id":111,
"parentId":11
},
"state":"open",
"children":[{
"data":{
"title":"Sub Branch 1"
},
"attr":{
"id":1111,
"parentId":111
},
"state":"open",
"children":[{
"data":{
"title":"Leaf"
},
"attr":{
"id":111111,
"parentId":111
}
}]
},
{
"data":{
"title":"Sub Branch 2"
},
"attr":{
"id":111111,
"parentId":111
}
}
]
}
当我输入id 111时,我想得到这个json。我该怎么办?
编辑:考虑我有一个GUI来输入节点的ID。并说我输入111我应该能够得到如上所述的json。 我只需要在js或jQuery中如何做到这一点。我不在乎UI。
感谢!
答案 0 :(得分:1)
function getNodeById(nodes, wantId) {
var search = nodes.slice(0);
while (node = search.shift()) {
if (node.attr.id == wantId) {
return node;
}
if (node.children) {
search.push.apply(search, node.children);
}
}
return false;
}
如果你传递任何级别的对象,它将递归搜索对象和子对象,直到找到匹配的ID,否则将返回false。
调用该函数:
var node = getNodeById(myArray, 1111);
console.log(node);