我有以下json:
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'}
]
答案 0 :(得分:1)
int $80
答案 1 :(得分:0)
您可以遍历与用户输入匹配的数组,然后检查特定元素是否具有您要查找的属性。试试这种方式,
var input = '02';
for(var index in source){
if(source[index].k == input){
if(source[index].hasOwnProperty('children')){
console.log(source[index]);
}
}
}
答案 2 :(得分:0)
尝试以下方法:
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
进行匹配。如果找到匹配的对象,我们会在该对象的mergeChildren
属性上调用children
。
mergeChildren
遍历给定的对象数组,并将每个键推送到一个名为children
的数组中。如果任何对象本身都有子节点,我们通过递归调用children
并使用Array#concat函数将它们连接到我们的mergeChildren
累加器。
请参阅此JSFiddle中的示例数据中的脚本。
答案 3 :(得分:0)
您可以尝试以下代码。
$(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;
}
});
});
答案 4 :(得分:0)
尝试此功能:
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 || []);
}, []);
}