Javascript 根据对象中键的值对数组中的对象分组

Javascript 根据对象中键的值对数组中的对象分组,javascript,ecmascript-6,reduce,Javascript,Ecmascript 6,Reduce,我有以下数据,我想根据日期排序-不包括时间戳 注意:我有权访问此任务的moment 我的数据如下所示: const data = [ { "fixture": "AC v Inter", "kickOffTime": "2018-06-14T15:00:00Z", }, { "fixture": "DC v NYC", "kickOffTime": "2018-06-15T12:00:00Z", }, { "fixt

我有以下数据,我想根据日期排序-不包括时间戳

注意:我有权访问此任务的
moment

我的数据如下所示:

const data = [
   {
     "fixture": "AC v Inter",
     "kickOffTime": "2018-06-14T15:00:00Z",
   },
   {
     "fixture": "DC v NYC",
     "kickOffTime": "2018-06-15T12:00:00Z",
   },
   {
     "fixture": "AFC v LPC",
     "kickOffTime": "2018-06-15T15:00:00Z",
   },
   {
      "fixture": "DTA v MC",
      "kickOffTime": "2018-06-15T18:00:00Z",
    },
    {
       "fixture": "LAC v GC",
       "kickOffTime": "2018-06-16T18:00:00Z",
    }
];
我尝试了很多方法。我希望实现的最终结果是以下数据结构

const updatedDataStructure = [
   {
     date: "2018-06-14",
     fixtures: [{
        "fixture": "AC v Inter",
        "kickOffTime": "2018-06-14T15:00:00Z",
      }]
   },
   {
     date: "2018-06-15",
     fixtures: [
      {
        "fixture": "DC v NYC",
        "kickOffTime": "2018-06-15T12:00:00Z",
       }, 
      {
        "fixture": "AFC v LPC",
       "kickOffTime": "2018-06-15T15:00:00Z",
      },
      {
        "fixture": "DTA v MC",
        "kickOffTime": "2018-06-15T18:00:00Z",
       },
     ]
   }, 
   {
     date: "2018-06-16",
     fixtures: [{
         "fixture": "LAC v GC",
         "kickOffTime": "2018-06-16T18:00:00Z",
     }]
   },
];
这是我最近的一次尝试,几乎成功了:

const result = fixtures.reduce(function (r, a) {
  r[moment(a.kickOffTime).format('ddd Do MMM')] = r[moment(a.kickOffTime).format('ddd Do MMM')] || [];
  r[moment(a.kickOffTime).format('ddd Do MMM')].push(a);
  return r;
}, Object.create(null));

您可以只从日期中获取一个片段,然后获取对象的条目并映射新的键/值

const
数据=[{赛程:“AC v Inter”,开球时间:“2018-06-14T15:00:00Z”},{赛程:“DC v NYC”,开球时间:“2018-06-15T12:00:00Z”},{赛程:“AFC v LPC”,开球时间:“2018-06-15T15:00:00Z”},{赛程:“DTA v MC”,开球时间:“2018-06-15T18:00:00Z”},{赛程:“LAC v GC”,开球时间:“2018-06-16T18:00:00Z”};
结果=对象
.条目(数据减少((r,a)=>{
var key=a.kickOffTime.slice(0,10);
r[键]=r[键]| |[];
r[键]。按(a);
返回r;
},Object.create(null)))
.map(([date,fixtures])=>({date,fixtures}));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以使用
reduce
将数组分组到一个对象中。使用
Object.values
可以将对象转换为数组

const数据=[{
“夹具”:“交流电压内部”,
“启动时间”:“2018-06-14T15:00:00Z”,
},
{
“固定装置”:“DC v NYC”,
“启动时间”:“2018-06-15T12:00:00Z”,
},
{
“固定装置”:“AFC v LPC”,
“启动时间”:“2018-06-15T15:00:00Z”,
},
{
“固定装置”:“DTA v MC”,
“启动时间”:“2018-06-15T18:00:00Z”,
},
{
“固定装置”:“LAC v GC”,
“启动时间”:“2018-06-16T18:00:00Z”,
}
];
const result=Object.values(data.reduce)(c,v)=>{
设t=v['kickOffTime'].split('t',1)[0];
c[t]=c[t]|{日期:t,固定装置:[]}
c[t].夹具.推送(v);
返回c;
}, {}));

控制台日志(结果)其他答案先到了,所以我会给其他用户,但也给了你+1,很好的答案@彼得弗拉根:不用担心。谢谢:)我实际上也在使用你的解决方案-它有点整洁:-D