簡體   English   中英

從json獲取所有子節點

[英]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]); 
        }
    }
}

的jsfiddle

你可以嘗試下面的代碼。

$(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM