我试图接受这个对象数组:
var channels = [{
cid: 5,
pid: 10
},
{
cid: 10,
pid: 0
},
{
cid: 20,
pid: 5
},
{
cid: 15,
pid: 10
}];
cid =频道ID,pid =父频道ID。
我需要将他们的频道分组,但是,这些频道也可以是父母。如何递归地将它们分组,如下所示?:
var data = [{
cid: 10,
pid: 0,
sub_channels: [{
cid: 5,
pid: 10,
sub_channels: [{
cid: 20,
pid: 5
}]
},
{
cid: 15,
pid: 10
}];
}];
我正在使用NodeJS,所以我非常愿意尝试使用任何模块或javascript库来实现这一点。
答案 0 :(得分:1)
在这里,它只需要3个循环。
var _ = require('lodash')
var channels = [
{
cid: 5,
pid: 10
},
{
cid: 10,
pid: 0
},
{
cid: 20,
pid: 5
},
{
cid: 15,
pid: 10
}
];
var map = {}
, parented = {}
_(channels)
.each(function (channel) {
map[channel.cid] = channel;
})
.each(function (channel) {
var parent = map[channel.pid]
if (!parent) return
if (!parent.sub_channels) parent.sub_channels = []
parent.sub_channels.push(channel)
parented[channel.cid] = channel
})
var result = _.filter(map, function (channel) {
return !parented[channel.cid]
})
console.log(JSON.stringify(result, null, 2))