2014-03-03 99 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