2015-11-07 2 views
-2

Как я могу получить все имена от этого объекта?получить все имена детей от объекта

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

Что бы он исполнил Алекс Рики Джон Том.

+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); 
    }) 
); 
} 
Смежные вопросы