2011-07-27 9 views
-1

私は、すべてparentIDを持つ配列の中にいくつかのオブジェクトを持っています。 1つの項目を指定すると、配列をループしてオブジェクトの系列を構築する必要があります。 これを行う関数を知っている人はいますか?私は車輪を再発明して何を検索するのか分からないようにしています。オブジェクトを親と親の親を見つけるためにjsonの配列をループする

おかげ

+0

"系統"?あれは何でしょう? – Tomalak

+2

配列の例を挙げることはできますか? – Seth

答えて

1

はい、このコードを使用します(私はあなたのための私のノートからコピーして貼り付けました)

Object.sizeは次のように定義されて
success: function(msg){ //success response from an AJAX request 
     var obj=JSON.parse(msg); 
     for(var i=0;i<Object.size(obj);i++){ 
     var job=obj[i]; 
     var startDate=job['startDate']; 
     var id=job['id']; 
     var area=job['area']; 
     var nDays=job['nDays']; 
     //etc. 
     } 

Object.size=function(obj){ 
    var size=0,key; 
    for (key in obj){ 
     if(obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
}; 
+0

面白い、ちょうどそれをsussed私はちょうど何も戻ってくるまで、外部ループに発見されたアイテムを渡す必要があります。そこに素敵な図書館があるかもしれないと思った。 – Chin

+0

あなたは何かをするためにライブラリを必要としないので、簡単です – Eamorr

+0

すごく感謝します。このスタイルは私にとっては初めてのことです。 – Chin

0

これは、idとparentIdに基づく単純な汎用ツリーを実装します:

function Node(obj) { 
    this.data  = obj; 
    this.parent = null; 
    this.children = []; 
} 
function Tree(objArray, idField, parentIdField) { 
    this.index = {0: new Node()}; 

    // build an index by the value of idField 
    for (var i=0, j=objArray.length; i<j; i++) { 
    var currObj = objArray[i]; 

    this.index[ currObj[idField] ] = new Node(currObj); 
    } 
    // link the individual objects to a tree 
    for (var i=0, j=objArray.length; i<j; i++) { 
    var currObj = objArray[i], 
     currNode = this.index[ currObj[idField] ], 
     parentNode = this.index[ currObj[parentIdField] ]; 

    if (parentNode) { 
     currNode.parent = parentNode; 
     parentNode.children.push(currNode); 
    } 
    } 
} 

これでテストできます:

var testArray = [ 
    {id: 1, parent: 0, name: "Test 1"}, 
    {id: 2, parent: 0, name: "Test 2"}, 
    {id: 3, parent: 1, name: "Test 1.1"}, 
    {id: 4, parent: 1, name: "Test 1.2"}, 
    {id: 5, parent: 3, name: "Test 1.1.1"}, 
    {id: 6, parent: 2, name: "Test 2.1"} 
]; 

var tree = new Tree(testArray, "id", "parent"); 

var root = tree.index[0]; 

for (var i=0; i<root.children.length; i++) { 
    console.log(root.children[i].data.name); 
} 
// "Test 1" 
// "Test 2" 

console.log(tree.index[5].parent.data.name); 
// "Test 1.1" 
関連する問題