我在以下结构中有一组对象
var projects = [
{id:'1',name:'project1', parentid:"null"},
{id:'2',name:'project2', parentid:"null"},
{id:'3',name:'subproject1', parentid:"1"},
{id:'4',name:'subproject2', parentid:"1"},
{id:'5',name:'subproject3', parentid:"2"}
];
我想创建一个具有以下结构的新数组
var newProjects = [
{text:'project1', children:[
{id:'3',name:'subproject1', parentid:"1"},
{id:'4',name:'subproject2', parentid:"1"}
]},
{text:'project2', children:[
{id:'5',name:'subproject3', parentid:"2"}
]}
]
我已经能够使用一堆循环和if语句来执行此操作,但是想通过使用Underscore.js来清理它,但是无法这样做。有人可以指出我正确的方向吗?
答案 0 :(得分:1)
根据给出的数据,您可以轻松使用简单的groupBy
和map
。
这样的事情:
var grouped = _.groupBy(projects, 'parentid');
var newProjects = _.map(grouped['null'], function (project, id) {
return {
text: project.name,
children: grouped[project.id]
};
});
如果你有更深的嵌套,你需要制定一个更强大的解决方案,但这应该让你知道该怎么做。