[英]get all child nodes from json
我有以下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'}
]
var getChildren(key) {
var x = source.filter(function(s){
return s.k == key;
});
if( x.length && typeof x[0].children !== 'undefined') {
return x[0].children;
}
return false;
}
請嘗試以下方法:
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
,我們通過遞歸調用mergeChildren
並使用Array#concat函數將它們連接到我們的children
存儲器。
在此JSFiddle中查看與您的示例數據一起使用的腳本。
您可以遍歷與用戶輸入匹配的數組,然后檢查特定元素是否具有您要查找的屬性。 試試這個,
var input = '02';
for(var index in source){
if(source[index].k == input){
if(source[index].hasOwnProperty('children')){
console.log(source[index]);
}
}
}
你可以嘗試下面的代碼。
$(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 || []);
}, []);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.