Underscore.js具有子数组的新对象数组

时间:2014-07-09 14:46:12

标签: javascript jquery json underscore.js

我在以下结构中有一组对象

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来清理它,但是无法这样做。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

根据给出的数据,您可以轻松使用简单的groupBymap

这样的事情:

var grouped = _.groupBy(projects, 'parentid');
var newProjects = _.map(grouped['null'], function (project, id) {
    return {
        text: project.name,
        children: grouped[project.id]
    };
});

如果你有更深的嵌套,你需要制定一个更强大的解决方案,但这应该让你知道该怎么做。