2017-09-28 5 views
0

は、ここで私はをループにしたいJSONオブジェクトです:動的なネストされたオブジェクトのループJS

{ 
    node: 'tree', 
text: 'Main Node', 
    childs:[ 
     { 
     node: 'tree', 
     text: 'First Child', 
     childs:[{ 
       node: 'tree', 
       text: 'first child child' 
       }....] 
     },{ 
     node: 'tree', 
     text: '2nd Child', 
     childs:[{ 
       node: 'tree', 
       text: '2nd child child' 
       }...] 
     }...] 
} 

は、ここでは、JSONの最初のタイプです。問題は、jsonは動的で、子要素はさまざまな条件によって異なるということです。だから私はjsonをループして葉を追加したい:最後の入れ子要素の終わりまで真。ここ 希望は何かということです:

{ 
     node: 'tree', 
    text: 'Main Node', 
     childs:[ 
      { 
      node: 'tree', 
      text: 'First Child', 
      childs:[{ 
        node: 'tree', 
        text: 'first child child', 
        leaf: true // i want to add this node to every last one 
        }] 
      },{ 
      node: 'tree', 
      text: '2nd Child', 
      childs:[{ 
        node: 'tree', 
        text: '2nd child child', 
        leaf: true 
        }] 
      }] 
    } 
+0

ん[この回答](https://stackoverflow.com/a/15268692/6836963)から別の質問は助けますか? –

+0

いいえ、私のjsonオブジェクトのネストされた要素が不明であるためです。 10段階まで入れ子にすることができます。私は事前にステージを知らない。 –

+0

オブジェクトキーの存在を確認できませんか? 'hasOwnProperty'と同じですか? –

答えて

0

あなたは再帰関数でそれを行うことができます。

let objt = { 
    node: 'tree', 
    text: 'Main Node', 
    childs: [ 
     { 
      node: 'tree', 
      text: 'First Child', 
      childs: [{ 
       node: 'tree', 
       text: 'Main Node' 
      }] 
     }, { 
      node: 'tree', 
      text: '2nd Child', 
      childs: [{ 
       node: 'tree', 
       text: '2nd child child' 
      }] 
     }] 
}; 


function setLeaf(objt) { 
    if (!objt.childs) { 
     objt.leaf = true; 
    } else { 
     objt.childs.forEach(child => setLeaf(child)) 
    } 
} 

setLeaf(objt); 
関連する問題