我正在尝试从数据库(Mongo)中创建一个格式化的集合。
这是输入的格式:
[{_id:1,name:'1'},
{_id:2,name:'2},
{_id:3,name:'1-1',parent:1},
...
{_id:50,name:'1-1-3',parent:3}]
正如你所看到的,'最深的祖先'是_ids 1和2.孩子的第一个节点包含_id 3,它有一个孩子,_id 50。
我正在努力使用Lodash创建这种集合:
[{
_id:1,name:'1',children:[
{_id:3,name:'1-1',children:[
...,
{_id:50,name:'1-1-3',children:[]}
]},
...
]
},{
_id:1,name:'1',children:[...]
}]
这是我尝试过的:
var result=_.chain(input)
.groupBy('parent')
.pairs()
.map(function(currentItem){
return _.object(_.zip(['parent','children'],currentItem))
})
.value();
但它不能以递归的方式工作......
有人能帮助我吗?
感谢。
答案 0 :(得分:0)
您可以遍历集合以获得所需的结构:
// create and indexed object with the _id field as key - improve performance
var indexed = _.indexBy(data, '_id');
// iterate to create the structure
_.each( data, function(datum){
datum.children = [];
if( _.has(datum,'parent')){
indexed[datum.parent].children.push(datum);
}
})
此解决方案确实假设在每个子节点之前处理父节点,即子节点阵列在被推入之前创建。如果需要,有许多方法可以解决,但上面的代码显示了创建嵌套结构的方法。