Javascript 从json获取所有子节点
我有以下json:Javascript 从json获取所有子节点,javascript,jquery,json,Javascript,Jquery,Json,我有以下json: var source=[{'k':'01'}, {'k':'02', 'children': [ {'k':'05'}, {'k':'06', 'children': [ {'k':'ABC'}, {'k':'PQR'} ]
var source=[{'k':'01'},
{'k':'02', 'children': [
{'k':'05'},
{'k':'06', 'children': [
{'k':'ABC'},
{'k':'PQR'}
]},
{'k':'07'}
]},
{'k':'03'}];
我希望能够为k指定一个值,并取回所有的子代(以及孙辈和曾孙辈,等等)
例如,如果我提供'02'
,我希望接收
[
{'k':'05'},
{'k':'06'},
{'k':'ABC'},
{'k':'PQR'},
{'k':'07'}
]
可以遍历与用户输入匹配的数组,然后检查特定元素是否具有要查找的属性。这样试试看
var input = '02';
for(var index in source){
if(source[index].k == input){
if(source[index].hasOwnProperty('children')){
console.log(source[index]);
}
}
}
尝试以下操作:
function mergeChildren(sources) {
var children = [];
for (var index in sources) {
var source = sources[index];
children.push({k: source.k});
if (source.children) {
children = children.concat(mergeChildren(source.children))
}
}
return children;
}
function findChildrenForK(sources, k) {
for (var index in sources) {
var source = sources[index];
if (source.k === k) {
if (source.children) {
return mergeChildren(source.children);
}
}
}
}
findChildrenForK
扫描对象数组、sources
,并将其属性k
与提供给函数的k
相匹配。如果找到匹配的对象,我们将对该对象的children
属性调用mergeChildren
mergeChildren
迭代给定给它的对象数组,并将每个键推入一个名为children
的数组。如果任何对象本身有子对象,我们通过递归调用mergeChildren
并使用函数将它们连接到children
累加器
请参阅本节中的脚本和示例数据。您可以尝试下面的代码
$(document).ready(function () {
var source = [{ 'k': '01' }, { 'k': '02', 'children': [{ 'k': '05' }, { 'k': '06' }, { 'k': '07' }] }, { 'k': '03' }];
$.each(source, function (i, item) {
if (item.k == "02")
{
var list = item.children;
}
});
});
尝试此功能:
function getChildren(source, parentId) {
return $.grep(source, function(parent) {
// get only parents with matched id
return parent.k === parentId;
}).reduce(function(children, parent) {
// sum all children into one array
return children.concat(parent.children || []);
}, []);
}
你能编辑一下你的答案吗。所以,我可以检查一下:)你的代码运行得很好,但是它只显示了孩子而不是孙子。你可以为这个json做这件事吗
var source=[{'k':'01'},{'k':'02','children':[{'k':'05'},{'k':'06','children':[{'k':'ABC'},{'k':'PQR'},{'k':'07'},{'k':'03'}代码>因为它不会为孙子孙女显示在这种情况下,您需要递归。它不会返回孙子孙女:(否则它工作正常
function getChildren(source, parentId) {
return $.grep(source, function(parent) {
// get only parents with matched id
return parent.k === parentId;
}).reduce(function(children, parent) {
// sum all children into one array
return children.concat(parent.children || []);
}, []);
}