使用Node,我实现了一个ID3标签解析器来获取MP3的标题,专辑和艺术家。
现在,我需要获取我已经收到的信息,然后按专辑名称对它们进行分组。
根据我的具体用法,我试图从
开始[
{
title: 'Break You',
artist: 'Lamb Of God',
album: 'Ashes Of The Wake'
},
{
title: 'An Extra Nail For Your Coffin',
artist: 'Lamb Of God',
album: 'Ashes Of The Wake'
},
{
title: 'Envy And Doubt',
artist: 'Sever The King',
album: 'Traitor'
},
{
title: 'Self Destruct',
artist: 'Sever The King',
album: 'Traitor'
},
...
]
[
'Ashes Of The Wake'{
{
title: 'Break You',
artist: 'Lamb Of God'
},
{
title: 'An Extra Nail For Your Coffin',
artist: 'Lamb Of God'
}
}
'Traitor'{
{
title: 'Envy and Doubt',
artist: 'Sever The King'
},
{
title: 'Self Destruct',
artist: 'Sever The King'
}
},
...
]
最好的方法是什么?我对JS来说比较新,所以可能很简单。
答案 0 :(得分:6)
forEach()
方法每个数组元素执行一次提供的函数。
var data = [{ title: 'Break You', artist: 'Lamb Of God', album: 'Ashes Of The Wake' }, { title: 'An Extra Nail For Your Coffin', artist: 'Lamb Of God', album: 'Ashes Of The Wake' }, { title: 'Envy And Doubt', artist: 'Sever The King', album: 'Traitor' }, { title: 'Self Destruct', artist: 'Sever The King', album: 'Traitor' }],
grouped = {};
data.forEach(function (a) {
grouped[a.album] = grouped[a.album] || [];
grouped[a.album].push({ title: a.title, artist: a.artist });
});
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
&#13;
答案 1 :(得分:2)
var output = input.reduce(function(result, value) {
result[value.album] = result[value.album] || [];
result[value.album].push({ title: value.title, artist: value.artist });
return result;
}, {});
答案 2 :(得分:0)
OBS:'Wake'和'Traitor'应该是数组,而不是对象,因为它们有多个孩子。
您不必,但如果您想使用underscore
,正如@Daniel所说,您可以使用groupBy
功能。
var data = [
{
title: 'Break You',
artist: 'Lamb Of God',
album: 'Ashes Of The Wake'
},
{
title: 'An Extra Nail For Your Coffin',
artist: 'Lamb Of God',
album: 'Ashes Of The Wake'
},
{
title: 'Envy And Doubt',
artist: 'Sever The King',
album: 'Traitor'
},
{
title: 'Self Destruct',
artist: 'Sever The King',
album: 'Traitor'
}
];
var groupedData = _.groupBy(data, 'album');
console.log(groupedData);
将输出:
[
'Ashes Of The Wake': [
{
title: 'Break You',
artist: 'Lamb Of God'
},
{
title: 'An Extra Nail For Your Coffin',
artist: 'Lamb Of God'
}
],
'Traitor': [
{
title: 'Envy and Doubt,
artist: 'Sever The King'
},
{
title: 'Self Destruct',
artist: 'Sever The King'
}
]
]
答案 3 :(得分:0)
正如Kieran建议的那样,使用underscore.js为您提供了一个简单优雅的解决方案。
var groupedData = _.groupBy(data, 'album');
这是羽毛球:http://plnkr.co/edit/a7DhxpGx0C4FVMgIjzPY?p=preview
我想补充一点,如果你正在使用Node.js,你会想要使用lodash而不是下划线