关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。
此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic在这里,这个问题的解决方式不太可能帮助 future 的读者。
5年前关闭。
Improve this question
我正在尝试按日期对数组中的对象进行分组:
var list = [
{
date: "2017-01-01",
type: "type1",
amount: 100
},
{
date: "2017-01-01",
type: "type2",
amount: 150
},
{
date: "2017-01-02",
type: "type1",
amount: 200
}
]
我试图得到类似的东西:
var dateArr = [
{
date: "2017-01-01",
activities: [
{
type: "type1",
amount: 100
},
{
type: "type2",
amount: 150
}]
}
]
我已经尝试了一些事情......像这样使用下划线(从这里 https://stackoverflow.com/a/15888912/4989305 ):
var dateArr = _
.chain(list)
.groupBy('date')
.map(function(value, key) {
return {
date: key,
activities: [{
type: _.pluck(value, 'type'),
amount: _.pluck(value, 'amount')
}]
}
})
.value();
我也试过这个(从这里 https://stackoverflow.com/a/31373860/4989305 )
var dateArr = {};
list.forEach(function(item){
dateArr[item.date] = dateArr[item.date]||[];
dateArr[item.date].push(item);
});
但是,由于某种原因,两者都返回空。
任何帮助将不胜感激。
最佳答案
几行现代 JavaScript 将得到你想要的结果:
var dateArr = Object.values(list.reduce((result, {
date,
type,
amount
}) => {
// Create new group
if (!result[date]) result[date] = {
date,
activities: []
};
// Append to group
result[date].activities.push({
type,
amount
});
return result;
}, {}));
解释:
Array.reduce
将列表合并为一组结果,一个普通对象,按日期分组。 reduce
,以便下一个项目将合并到同一个集合中。 Object.values
从集合中提取值。 (放下 key )关于Javascript按属性分组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42480663/