我有一系列具有日期字段的项目。我需要按日期对项目进行分组,以便在我的页面上我可以按照此日期对它们进行分组。像这样:
Monday 1st:
-event 1
-event 2
Tuesday 2nd:
-event 3
这样可行,但我做了很多循环。有更高性能的解决方案吗?或者我的方法很好吗?我简化了我的代码,但实际上我会有一个更大的数据集。
const items=[{name: '1',date: '10 dec'},{name: '2',date: '10 dec'},{name: '3',date: '11 dec' }];
const dates = items.map(item=> item.date)
const datesNoDupe = Array.from(new Set(dates));
const output = datesNoDupe.map(date=>{
return items.filter(item=>{
return item.date === date;
});
})
console.log(output)
答案 0 :(得分:1)
您可以使用array#reduce
在一次迭代中对数组进行分组。
const items=[{name: '1',date: '10 dec'},{name: '2',date: '10 dec'},{name: '3',date: '11 dec' }];
var result = items.reduce((r, {name, date}) => {
r[date] = r[date] || [];
r[date].push({name,date});
return r;
},{});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }