This question already has answers here:
Most efficient method to groupby on an array of objects
                                
                                    (42个答案)
                                
                        
                                2年前关闭。
            
                    
我有一个带有日期字段的项目数组。我需要按日期对项目进行分组,以便在页面上可以按该日期对它们进行分组。像这样:

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/

最佳答案

您可以使用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; }

关于javascript - 在JavaScript中按字段对数组项进行分组的最有效方式? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47805609/

10-12 13:46