我有以下 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'}
]
请尝试以下操作:
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
to the k
提供给函数。如果找到匹配的对象,我们调用mergeChildren
在那个物体上children
财产。
mergeChildren
迭代给定的对象数组,并将每个键推入一个数组,称为children
。如果任何对象本身有子对象,我们会将它们连接到我们的children
通过调用累加器mergeChildren
递归地并使用数组#concat https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat功能。
请参阅此脚本中的示例数据JSFiddle https://jsfiddle.net/naa46dj8/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)