如何按月和年对对象数组进行分组?

cat*_*use -2 javascript arrays grouping javascript-objects

我有一个像这样的对象数组:

entries: [  
   {  
      id:1,
      text: "Lorem ipsum",
      timeStamp:"Thu, 01 Jun 2018"
   },
   {  
      id:3,
      text:"Lorem ipsum",
      timeStamp:"Thu, 24 May 2018"
   },
   {  
      id:4,
      text: "Lorem ipsum",
      timeStamp:"Thu, 24 May 2018"
   }
]
Run Code Online (Sandbox Code Playgroud)

现在我希望能够将它们分组到“存档”数组中,如下所示:

archive: [
   {
      monthyear: May 2018,
      entries: 2
   },
   {
      monthyear: June 2018,
      entries: 5
   }
]
Run Code Online (Sandbox Code Playgroud)

想知道我应该使用什么样的数组函数来获得预期的结果。

Nen*_*car 5

您可以使用reduce方法按日期对数组项进行分组,并toLocaleString使用方法来获取月份和年份。

const data = [{"id":1,"text":"Lorem ipsum","timeStamp":"Thu, 01 Jun 2018"},{"id":3,"text":"Lorem ipsum","timeStamp":"Thu, 24 May 2018"},{"id":4,"text":"Lorem ipsum","timeStamp":"Thu, 24 May 2018"}]

const result = data.reduce((r, {timeStamp}) => {
  let dateObj = new Date(timeStamp);
  let monthyear = dateObj.toLocaleString("en-us", { month: "long", year: 'numeric' });
  if(!r[monthyear]) r[monthyear] = {monthyear, entries: 1}
  else r[monthyear].entries++;
  return r;
}, {})

console.log(Object.values(result))
Run Code Online (Sandbox Code Playgroud)