2015-11-07 47 views
-2

如何從此對象獲取所有名稱?從對象中獲取所有兒童名稱

var familyTree = {name: 'Alex', 
    children:[ 
     {name: 'Ricky', 
      children:'[...]'} 
     {name: 'John', 
      children:[{name: 'Tom', 
       children: '[...]'}]}]}; 

它會執行Alex Ricky John Tom。

+2

您需要學習如何編寫遞歸函數。去谷歌上查詢。 – SquareCat

回答

1

你可以寫一個簡單的遞歸函數,將遍歷您的樹的內容:

var familyTree = { 
    name: 'Alex', 
    children: [ 
     { 
      name: 'Ricky', 
      children: [ ] 
     }, 
     { 
      name: 'John', 
      children: [ 
       { 
        name: 'Tom', 
        children: [ ] 
       } 
      ] 
     } 
    ] 
}; 

var traverse = function(tree) { 
    console.log(tree.name); 
    for (var i = 0; i < tree.children.length; i++) { 
     traverse(tree.children[i]);  
    } 
}; 

traverse(familyTree); 
1

對於要改爲返回的只是登錄到控制檯陣列更加靈活的情況下,這裏是另一種方法該遞歸累積與深度優先遍歷和參數傳遞的數組:

function storeNames(tree, names) { 
    (names = names || []).push(tree.name); 
    for(var i = 0; i < tree.children.length; i++) { 
    storeNames(tree.children[i], names); 
    } 
    return names; 
} 

這裏是一個的寫入更多的功能性風格的另一種方法:

function storeNames(tree) { 
    return Array.prototype.concat(tree.name, 
    tree.children.map(function(child) { 
     return storeNames(child); 
    }).reduce(function(flattenedArr, nestedArr) { 
     return flattenedArr.concat(nestedArr); 
    }) 
); 
}