2016-01-20 23 views
1

我想將children數組添加到節點id = 52126f7d(或其他)。我該怎麼做?通過json樹中的id查找節點

var children = [ 
    { name: 'great-granchild3', 
    id: '2a12a10h' 
    }, 
    { name: 'great-granchild4', 
    id: 'bpme7qw0' 
    } 
] 

// json tree 
var objects = { 
    name: 'all objects', 
    id:"2e6ca1c3",  
    children: [ 
    { 
     name: 'child', 
     id: "6c03cfbe", 
     children: [     
      { name: 'grandchild1', 
       id: "2790f59c" 
      }, 
      { name: 'grandchild2', 
       id: "52126f7d" 
      }, 
      { name: 'grandchild3', 
       id: "b402f14b" 
      }, 
      { 
       name: 'grandchild4', 
       id: "6c03cff0", 
       children: [ 
       { name: 'great-grandchild1', 
        id: "ce90ffa6" 
       }, 
       { name: 'great-grandchild2', 
        id: "52f95f28" 
       } 
       ] 
      } 
     ] 
    },   
    { 
     name: 'child2', 
     id: "7693b310", 
     children: [ 
      { name: 'grandchild5', 
      id: "def86ecc" 
      }, 
      { name: 'grandchild6', 
      id: "6224a8f8" 
      } 
     ] 
    } 
] 
} 

var objects = { 
    name: 'all objects', 
    id:"2e6ca1c3",  
    children: [ 
    { 
     name: 'child', 
     id: "6c03cfbe", 
     children: [     
      { name: 'grandchild1', 
       id: "2790f59c" 
      }, 
      { name: 'grandchild2', 
       id: "52126f7d", 
       children = [ 
       { name: 'great-granchild3', 
        id: '2a12a10h' 
       }, 
       { name: 'great-granchild4', 
        id: 'bpme7qw0' 
       } 
       ] 
      }, 
      { name: 'grandchild3', 
       id: "b402f14b" 
      }, 
      { 
       name: 'grandchild4', 
       id: "6c03cff0", 
       children: [ 
       { name: 'great-grandchild1', 
        id: "ce90ffa6" 
       }, 
       { name: 'great-grandchild2', 
        id: "52f95f28" 
       } 
       ] 
      } 
     ] 
    },   
    { 
     name: 'child2', 
     id: "7693b310", 
     children: [ 
      { name: 'grandchild5', 
      id: "def86ecc" 
      }, 
      { name: 'grandchild6', 
      id: "6224a8f8" 
      } 
     ] 
    } 
] 
} 
+0

可能duplidate http://stackoverflow.com/questions/18884840/adding-a-new-array-element-to-a-json-object – lordkain

回答

2

首先找到適當的節點。

function getNodeById(id, node){ 
    var reduce = [].reduce; 
    function runner(result, node){ 
     if(result || !node) return result; 
     return node.id === id && node || //is this the proper node? 
      runner(null, node.children) || //process this nodes children 
      reduce.call(Object(node), runner, result); //maybe this is some ArrayLike Structure 
    } 
    return runner(null, node); 
} 

var target = getNodeById("52126f7d", objects); 
target.children = children; 
+0

目標是單獨的變量。如何在現有的'objects'中插入'target'? –

+0

您不必插入它,它是對具有該id的特定節點的引用。這個節點已經在對象中。 – Thomas

+0

我想用'target'節點獲得一棵完整的樹。我編輯了問題,請再看一遍。 –

0

落得如何:

objects.children[0].children[1].children = children; 
+0

沒有沒有沒有... ID = 52126f7d僅用於例。 –

+0

哈哈,你有趣的傢伙:)我的意思是道格霍瑟爾 – lordkain