2016-11-03 19 views
3

すべての子供の名前をすべて親にするようにしようとします。 I`mがでツリーを作成します。どのように再帰的に親の子供の名前を取得

GUI.prototype.buildTree = function(elements, parentId){ 
    var response = []; 
    for(var elem in elements){ 
     if(elements[elem]['parent'] == parentId){ 
      var childrens = this.buildTree(elements, elements[elem]['id']); 
      if(childrens.length > 0){ 
       elements[elem]['childrens'] = childrens; 
      } 
      response.push(elements[elem]); 
     } 
    } 
    return response; 
}; 

buildTree方法から私の入力は、次のようになります。

[{ 
    "id" : 'x', 
    "parent" : 0, 
    "childrens" : [{ 
     "id" : 'y', 
     "parent" : "x", 
     "childrens" : [{ 
      "id" : 'z', 
      "parent" : "y" 
     }] 
    }] 
}] 

と私のような出力したいと思います:最高のopionは可能性があり

[{ 
    "id": "x", 
    "childrenNames": ["y", "z"] 
}] 

buildTreeメソッドでそれを行うが、私は方法を知らない。しかし、よりeasly私はそれのための別の方法を作成する必要がありますと思う。

私はあなたの助けを求める。

答えて

1

この提案はすべてのノードを訪問し、ノードのすべての子を取得します。

function getChildren(array) { 
 
    var result = []; 
 
    array.forEach(function iter(a) { 
 
     var children = []; 
 
     result.push({ id: a.id, children: children }); 
 
     this.push(a.id); 
 
     if (Array.isArray(a.children)) { 
 
      a.children.forEach(iter, children); 
 
      Array.prototype.splice.apply(this, [this.length, 0].concat(children)); 
 
     } 
 
    }, []); 
 
    return result; 
 
} 
 

 
var data = [{ id: 'x', parent: 0, children: [{ id: 'y', parent: "x", children: [{ id: 'z', parent: "y" }] }] }]; 
 

 
console.log(getChildren(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題