2015-11-07 37 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); 
    }) 
); 
}