2015-05-08 52 views
0

我想使用lodash或等效代碼移動樹的深層成員。移動多維數組樹的深層成員 - 使用lodash或下劃線

例樹

[ 
    { id: 32, name: 'unique name', children: [] }, 
    { id: 43, name: 'unique name', children: [] }, 
    { id: 55, name: 'unique name', children: [ 
     { id: 31, name: 'unique name', children: [] }, 
     { id: 63, name: 'unique name', children: [] }, 
     { id: 84, name: 'unique name', children: [ 
      { id: 47, name: 'unique name', children: [] }, 
      { id: 56, name: 'unique name', children: [] } 
     ] } 
    ] } 
    { id: 67, name: 'unique name', children: [ 
     { id: 78, name: 'unique name', children: [] }, 
     { id: 89, name: 'unique name', children: [] }, 
    ] }, 
    { id: 30, name: 'unique name', children: [] } 
] 

如何I:

  • 找到與ID特定對象:47
  • 此舉對象(ID:47),以一個新的水平樹

最好使用lodash。樹可以有無限的深度。


編輯針對所選擇的答案我重新工作的代碼,以更準確地滿足我的問題描述:https://jsfiddle.net/j88vencp/4/


+0

你的'數據'是不正確的?顯示語法錯誤。 –

回答

2

IF你可以稍微改變你的樹的結構它將會更容易以您想要的方式進行操作:

var collection = { 
    32 : { id: 32, name: 'unique name', children: {} }, 
    43: { id: 43, name: 'unique name', children: {} }, 
    55: { id: 55, name: 'unique name', children: { 
     31: { id: 31, name: 'unique name', children: {} }, 
     63: { id: 63, name: 'unique name', children: {} }, 
     84: { id: 84, name: 'unique name', children: { 
      47: { id: 47, name: 'unique name', children: {} }, 
      56: { id: 56, name: 'unique name', children: {} }, 
     } }, 
    } } 
} 

function moveElement(el, obj) { 
    var newEl = el; 
    var id = el.id; 
    // do removing and moving stuff here 
    console.log(newEl); 
    // remove from collection 
    _.omit(obj, el.id); 
    // add to collection in upper tree 
    obj[id] = newEl; 
    console.log(obj); 
} 

function deepSearch(obj, origobj, val) { 

    for (var key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      var el = obj[key]; 
      if (_.size(el.children) > 0) { 
       deepSearch(el.children, origobj, val); 
      } 
      if (key == val) { 
       moveElement(el, origobj); 
       return; 
      } 
     }  
    } 

} 

deepSearch(collection, collection, 56); 

這裏是小提琴 - >https://jsfiddle.net/j88vencp/4/

+0

將findKey()搜索嵌套深數組? – AndrewMcLagan

+0

你可以在答案中顯示一個小例子.. :-) – AndrewMcLagan

+0

你可以在不使用_.findKey的情況下做到這一點看到我更新的答案 – deowk

相關問題