通过JavaScript中的字段对数组项进行分组的最佳方式?

时间:2017-12-14 03:49:23

标签: javascript

我有一系列具有日期字段的项目。我需要按日期对项目进行分组,以便在我的页面上我可以按照此日期对它们进行分组。像这样:

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)

https://jsfiddle.net/vn1wLok6/

1 个答案:

答案 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; }