2017-07-12 6 views
1

私のJSONされています。今、私は、それぞれの子レコードがparentNameプロパティで親の名前を持つようにすることを望んループ内の子レコードから直接親レコードにアクセスする方法は?以下は

var records = 
[ 
    { 
    "name": "Node-1", 
    "nodes": [ 
     { 
     "name": "Node-1-1", 
     "parentName" : null, 
     "nodes": [ 
      { 
      "name": "Node-1-1-1", 
      "parentName" : null, 
      "nodes": [] 
      } 
     ] 
     } 
    ] 
    } 
]; 

。例えば

:ノード1は、ノード1-1

の親であるため、ノード1-1のための parentNameがノード1でなければなりません。しかし、ここで私はどのように私がいることを知っているだろうということになっておりませんノード-1はノード1-1の親であり、ノード-1のレコードを読み取っているときにノード-1の値にアクセスする方法は?

予想される出力:

[ 
    { 
    "name": "Node-1", 
    "nodes": [ 
     { 
     "name": "Node-1-1", 
     "parentName" : "Node-1", 
     "nodes": [ 
      { 
      "name": "Node-1-1-1", 
      "parentName" : "Node-1-1", 
      "nodes": [] 
      } 
     ] 
     } 
    ] 
    } 
]; 

var records = 
 
[ 
 
    { 
 
    "name": "Node-1", 
 
    "nodes": [ 
 
     { 
 
     "name": "Node-1-1", 
 
     "parentName" : null, 
 
     "nodes": [ 
 
      { 
 
      "name": "Node-1-1-1", 
 
      "parentName" : null, 
 
      "nodes": [] 
 
      } 
 
     ] 
 
     } 
 
    ] 
 
    } 
 
]; 
 
Iterate(records); 
 

 
function Iterate(nodes) 
 
    { 
 
    \t nodes.forEach(function (node) { 
 
     if (node.nodes) { 
 
       Iterate(node.nodes); 
 
      } 
 
    \t }); 
 
    }

答えて

2

あなたは反復メソッドに別のパラメータとして親に渡すことができます。

var records = [{ 
 
    "name": "Node-1", 
 
    "nodes": [{ 
 
    "name": "Node-1-1", 
 
    "parentName": null, 
 
    "nodes": [{ 
 
     "name": "Node-1-1-1", 
 
     "parentName": null, 
 
     "nodes": [] 
 
    }] 
 
    }] 
 
}]; 
 
Iterate(records); 
 

 
function Iterate(nodes, parent) { 
 
    nodes.forEach(function(node) { 
 
    if (parent) { 
 
     node.parentName = parent.name; 
 
    } 
 
    if (node.nodes) { 
 
     Iterate(node.nodes, node); 
 
    } 
 
    }); 
 
} 
 

 
console.log(records);

+0

これは私とthis.Appreciatedように支援して保管してください:) –

+0

助けて幸せを助けることへのあなたの親切な努力のためにあなたはそんなにworked.Thank! :) – H77

1

だけIterate関数のパラメータとしてparentNameを渡します。

var records = [ 
 
    { 
 
    "name": "Node-1", 
 
    "nodes": [ 
 
     { 
 
     "name": "Node-1-1", 
 
     "parentName" : null, 
 
     "nodes": [ 
 
      { 
 
      "name": "Node-1-1-1", 
 
      "parentName" : null, 
 
      "nodes": [] 
 
      } 
 
     ] 
 
     } 
 
    ] 
 
    } 
 
]; 
 

 
Iterate(records); 
 

 
console.log(records); 
 

 
function Iterate(nodes, parentName) { 
 
    nodes.forEach(node => { 
 
    if (parentName) { 
 
     node.parentName = parentName; 
 
    } 
 

 
    if (node.nodes) { 
 
     Iterate(node.nodes, node.name); 
 
    } 
 
    }); 
 
}

+0

私を助けるためのあなたの親切な努力のためにUpvotedそしてこのような助けを続けてください。お礼: –

+0

@ラーニングええ私は15秒遅れました:)とにかく感謝! – Erazihel

関連する問題