2014-03-03 139 views
1

我無法弄清楚如何將平面對象與父數組變換爲實際的嵌套(樹)層次結構對象。它基本上都可以歸結爲以下問題:將平面變換爲嵌套對象

我怎麼能拒絕一個樣本對象,如

var sample = { 
    name: '1.1.1.1', 
    parents: [{ 
     name: '1.1.1' 
    }, { 
     name: '1.1' 
    }, { 
     name: '1' 
    }] 
}; 

...高效地爲以下結果:

var result = [{ 
    name: '1', 
    children: [{ 
     name: '1.1', 
     children: [{ 
      name: '1.1.1', 
      children: [{ 
       name: '1.1.1.1' 
      }] 
     }] 
    }] 
}]; 

名稱是任意選擇和從理論上講,sample可以具有無限的深度。

不幸的是,resultchildren需要是一個對象數組,因爲我的實際使用情況稍微複雜一點,它由多個對象組成。它爲manage hierarchical data in MongoDB模擬了最佳實踐。

任何幫助,非常感謝。

回答

0

使用Underscore.js

var result = _.reduce(sample.parents, function(memo, node) { 
    node.children = [memo]; 
    return node; 
}, {name: sample.name}); 
+0

http://plnkr.co/edit/GGIV1I0WNFGkjqyUNEof?p=preview – redmallard

+0

非常感謝您!我甚至可以用本地['reduce'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)實現去除對Underscore的依賴,因爲我只是需要支持IE9 + :) – bernhardw