Home > Net >  I want to separate my array into other arrays by matchday
I want to separate my array into other arrays by matchday

Time:06-02

I'm trying to separate a huge array in order of matchday. There are 38 matchdays in total, I'm trying to display the games by matchdays.

I have this

 data.matches = [{matchday: 1, team: xxx}, {matchday: 1, team: xxx}, {matchday: 2, team: xxx} etc..]

I would like something like this

  data.matches = [[{matchday: 1, team: xxx}, {matchday: 1, team: xxx} ],[{matchday: 2, team: xxx}] etc..]

So you can see I create a new array for each different matchday, those new arrays will be nested inside the main array.

My poor attempt:

let results: any = [];

    if (isSuccess) {
        data.matches.map((item: any) => {
            for (let i = 1; i < 38; i  ) {
                if (item.matchday === i) {
                    results.push(item);
                } else {
                    results.splice(i, 0, item);
                }
            }
        });
        console.log(results);

    }

CodePudding user response:

You can use a reducer for that. Reduce to object with matchdays keys, and retrieve its values. Something like:

const matches = [
  {matchday: 1, team: `yxx`}, 
  {matchday: 1, team: `xyx`}, 
  {matchday: 2, team: `xxy`},
  {matchday: 15, team: `yyx`},
  {matchday: 15, team: `yyy`} ];
const byDay = Object.values(
  matches.reduce( (acc, res) => {
    acc[`day${res.matchday}`] = acc[`day${res.matchday}`] 
      ? acc[`day${res.matchday}`].concat(res) : [res];
    return acc;}, {} )
  );
console.log(byDay);
.as-console-wrapper {
    max-height: 100% !important;
}

CodePudding user response:

You can use this method:

const matches = [{matchday: 1, team: "xxx"}, {matchday: 1, team: "xxx"}, {matchday: 2, team: "xxx"}]
const result = Array.from(matches
        .reduce((m, val) => m.set(val.matchday, [...(m.get(val.matchday) || []), val]), new Map)
        .values()
);
console.log(result)

  • Related