Javascript 迭代并获取json的子集
我有一个json对象,如下所示Javascript 迭代并获取json的子集,javascript,jquery,json,Javascript,Jquery,Json,我有一个json对象,如下所示 [{ "data":{ "title":"Root" }, "attr":{ "id":1, "parentId":0 }, "state":"open", "children":[{ "data":{ "title":"Stem" }, "attr":{ "id":11, "parentId":1 },
[{
"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
}
}
]
}
]
}
]
}]
基本上结构是这样的
我拥有属性(attributes,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
}
}
]
}
我想在输入ID111时得到这个json。我该怎么做
编辑:假设我有一个GUI来输入节点的ID。假设我输入111,我应该能够得到如上所述的json。
我只需要知道如何在js或jQuery中实现它。我不在乎用户界面
谢谢
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);
如果将对象的任何级别传递给它,它将递归搜索对象和子对象,直到找到匹配的ID,否则将返回false
要调用该函数,请执行以下操作:
var node = getNodeById(myArray, 1111);
console.log(node);
当然是javascript/jQuery。当然是javascript/jQuery。我收到一个错误,因为firebug中的“search.shift()不是函数”。能举个详细的例子吗?谢谢您是否按照示例数据向其传递了数组
[]
?否!我只是传递一个节点ID,即node.attr(“ID”)。我想提取问题中提到的所有细节!!为了清楚起见,我使用jstree以树的格式重新呈现json数据。您说过您有一个json对象,它实际上是一个包含多个对象的数组。将您的数据和所需的ID传递给函数<代码>变量节点=getNodeById(myData,1111)代码>您将得到有问题的节点对象。@iCybernetics我看到您的类似帖子。你能帮忙吗?我收到一个错误,因为firebug中的“search.shift()不是函数”。能举个详细的例子吗?谢谢您是否按照示例数据向其传递了数组[]
?否!我只是传递一个节点ID,即node.attr(“ID”)。我想提取问题中提到的所有细节!!为了清楚起见,我使用jstree以树的格式重新呈现json数据。您说过您有一个json对象,它实际上是一个包含多个对象的数组。将您的数据和所需的ID传递给函数<代码>变量节点=getNodeById(myData,1111)代码>您将得到有问题的节点对象。@iCybernetics我看到您的类似帖子。你能帮忙吗?