group objects in array based on value of key in object

前端 未结 2 942
说谎
说谎 2020-12-20 00:41

I have the following data that I want to sort based on the date - not including the timestamp.

NOTE: I have access to moment for this task.

相关标签:
2条回答
  • You could take just a slice from the date and later take the entries of the object and map new key/values.

     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" }];
         result = Object
            .entries(data.reduce((r, a) => {
                var key = a.kickOffTime.slice(0, 10);
                r[key] = r[key] || [];
                r[key].push(a);
                return r;
            }, Object.create(null)))
            .map(([date, fixtures]) => ({ date, fixtures }));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    0 讨论(0)
  • 2020-12-20 00:57

    You can group the array using reduce into an object. Using Object.values you can convert the object into array.

    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 result = Object.values(data.reduce((c, v) => {
      let t = v['kickOffTime'].split('T', 1)[0];
      c[t] = c[t] || {date: t,fixtures: []}
      c[t].fixtures.push(v);
      return c;
    }, {}));
    
    console.log(result);

    0 讨论(0)
提交回复
热议问题