How do I group items in an array by date?

后端 未结 3 1814
谎友^
谎友^ 2021-01-01 19:13

Given the following array of objects:

[
{
\"notes\": \"Game was played\",
\"time\": \"2017-10-04T20:24:30+00:00\",
\"sport\": \"hockey\",
\"owner\": \"steve\         


        
3条回答
  •  粉色の甜心
    2021-01-01 19:35

    Here's a solution using reduce. Split the time into a date string, and then set a key for each date. If the key exists push it onto the array:

    Update added the array format version

    const data = [
      {notes: 'Game was played', time: '2017-10-04T20:24:30+00:00', sport: 'hockey', owner: 'steve', players: '10', game_id: 1},
      { notes: 'Game was played', time: '2017-10-04T12:35:30+00:00', sport: 'lacrosse', owner: 'steve', players: '6', game_id: 2 },
      { notes: 'Game was played', time: '2017-10-14T20:32:30+00:00', sport: 'hockey', owner: 'steve', players: '4', game_id: 3 },
      { notes: 'Game was played', time: '2017-10-04T10:12:30+00:00', sport: 'hockey', owner: 'henry', players: '10', game_id: 4 },
      { notes: 'Game was played', time: '2017-10-14T20:34:30+00:00', sport: 'soccer', owner: 'john', players: '12', game_id: 5 }
    ];
    
    // this gives an object with dates as keys
    const groups = data.reduce((groups, game) => {
      const date = game.time.split('T')[0];
      if (!groups[date]) {
        groups[date] = [];
      }
      groups[date].push(game);
      return groups;
    }, {});
    
    // Edit: to add it in the array format instead
    const groupArrays = Object.keys(groups).map((date) => {
      return {
        date,
        games: groups[date]
      };
    });
    
    console.log(groupArrays);

提交回复
热议问题