如何按日期创建排序对象

问题描述 投票:-4回答:2

我试图解决一个需要包含信息的对象数组的问题。例如,转换为:

[
{ 
  name: 'test1',
  date: '2019-02-18T08:33:01.000Z',
},
{ 
  name: 'test2',
  date: '2019-02-19T08:33:01.000Z',
},
{ 
  name: 'test3',
  date: '2019-02-19T08:33:01.000Z',
},
]

对此:

{
 '2019-02-18':{
   name: 'test1'
},
 '2019-02-19':[
 {
   name: 'test2',
 },
 {
   name: 'test3',
 }
]
}

我怎样才能实现这一目标?

javascript
2个回答
0
投票

假设你想为每个分组的date提供一个对象数组。另一种方法是将Array.reduce()String.match()结合使用

const input = [
  {name: 'test1', date: '2019-02-18T08:33:01.000Z'},
  {name: 'test2', date: '2019-02-19T08:33:01.000Z'},
  {name: 'test3', date: '2019-02-19T08:33:01.000Z'}
];

let res = input.reduce((acc, {name, date}) =>
{
    let [m, d] = date.match(/(.+)T/);
    acc[d] = [...(acc[d] || []), {name}];
    return acc;
}, {});

console.log(res);

-1
投票

这不仅仅是一种问题而不是一种排序。对象键也是未分类的。

function groupByDate(data) {
  let result = {};
  
  data.forEach((el) => {
    let datePart = el.date.split("T")[0];
    let value = result[datePart]
    if(value) {
      result[datePart].push({name: el.name})
    } else {
      result[datePart] = [{name: el.name}]
    }
  });
  
  return result;
}


var dates = [
{ 
  name: 'test1',
  date: '2019-02-18T08:33:01.000Z',
},
{ 
  name: 'test2',
  date: '2019-02-19T08:33:01.000Z',
},
{ 
  name: 'test3',
  date: '2019-02-19T08:33:01.000Z',
},
];

console.log(groupByDate(dates));
© www.soinside.com 2019 - 2024. All rights reserved.