从json获取所有子节点

时间:2015-08-18 06:57:47

标签: javascript jquery 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'}
            ]

5 个答案:

答案 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]); 
        }
    }
}

jsFiddle

答案 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 || []);
    }, []);
}