poopy
poopy

Reputation: 45

I want to get number of each team numbers in each day from jason array in jquery

I have a JSON array like this and I want to count each team numbers by day.

      const arrayVal = [{
            "DATE": "2020-12-1",
            "NAME": "JAKE",
            "TEAM_NO": 2,
            
        }, {
            "DATE": "2020-12-1",
            "NAME": "ANNA",
            "TEAM_NO": 2,
            
        }, {
            "DATE": "2020-12-1",
            "NAME": "JEFF",
            "TEAM_NO": 1,
            
        }, {
            "DATE": "2020-12-1",
            "NAME": "ERIKA",
            "TEAM_NO": 2,
           
        }, {
            "DATE": "2020-12-1",
            "NAME": "SUTTON",
            "TEAM_NO": 3,
        }, {
            "DATE": "2020-12-1",
            "NAME": "ARNOLD",
            "TEAM_NO": 3,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "JAKE",
            "TEAM_NO": 4,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "ANNA",
            "TEAM_NO": 2,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "JEFF",
            "TEAM_NO": 1,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "ERIKA",
            "TEAM_NO": 3,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "SUTTON",
            "TEAM_NO": 5,
             
        }, {
            "DATE": "2020-12-2",
            "NAME": "ARNOLD",
            "TEAM_NO": 5,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "JAKE",
            "TEAM_NO": 1,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "ANNA",
            "TEAM_NO": 1,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "JEFF",
            "TEAM_NO": 1,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "ERIKA",
            "TEAM_NO": 2,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "SUTTON",
            "TEAM_NO": 3,
             
        }, {
            "DATE": "2020-12-3",
            "NAME": "ARNOLD",
            "TEAM_NO": 3,
              
        }];

From above array I need something like this

    {
      "2020-12-1" : {
        1: 2, // 2 entries with no 1 team
        2: 3, // 3 entries with no 2 team
        // ...
      },
      "2020-12-2" : {
        // ...
      }
    }

So far I have below code lines which give me a json object. I need a help to get above result inside that object or as an array. Plesae suggest me if there is a better way to do this.

    TEAM_NO_COUNT = {}; // create an object
    $.each(JSON.parse(JSON.stringify(arrayVal)), function (key, val) {
      
      TEAM_NO_COUNT[val.DATE] = (TEAM_NO_COUNT[val.DATE] || 0);
      
    });

    alert(JSON.stringify(TEAM_NO_COUNT));

Please someone guide me how to do this ?

Upvotes: 0

Views: 50

Answers (2)

Owen Kelvin
Owen Kelvin

Reputation: 15083

This can be easily achieved with vanilla javascript without the help of jQuery, see below

const arrayVal=[{"DATE":"2020-12-1","NAME":"JAKE","TEAM_NO":2,},{"DATE":"2020-12-1","NAME":"ANNA","TEAM_NO":2,},{"DATE":"2020-12-1","NAME":"JEFF","TEAM_NO":1,},{"DATE":"2020-12-1","NAME":"ERIKA","TEAM_NO":2,},{"DATE":"2020-12-1","NAME":"SUTTON","TEAM_NO":3,},{"DATE":"2020-12-1","NAME":"ARNOLD","TEAM_NO":3,},{"DATE":"2020-12-2","NAME":"JAKE","TEAM_NO":4,},{"DATE":"2020-12-2","NAME":"ANNA","TEAM_NO":2,},{"DATE":"2020-12-2","NAME":"JEFF","TEAM_NO":1,},{"DATE":"2020-12-2","NAME":"ERIKA","TEAM_NO":3,},{"DATE":"2020-12-2","NAME":"SUTTON","TEAM_NO":5,},{"DATE":"2020-12-2","NAME":"ARNOLD","TEAM_NO":5,},{"DATE":"2020-12-3","NAME":"JAKE","TEAM_NO":1,},{"DATE":"2020-12-3","NAME":"ANNA","TEAM_NO":1,},{"DATE":"2020-12-3","NAME":"JEFF","TEAM_NO":1,},{"DATE":"2020-12-3","NAME":"ERIKA","TEAM_NO":2,},{"DATE":"2020-12-3","NAME":"SUTTON","TEAM_NO":3,},{"DATE":"2020-12-3","NAME":"ARNOLD","TEAM_NO":3,}];
const result = arrayVal.reduce((prev, {DATE, TEAM_NO}) => {
  prevCount = prev?.[DATE]?.[TEAM_NO] || 0
  return {...prev, [DATE]: { ...prev?.[DATE],  [TEAM_NO]: prevCount + 1} };
}, {})

console.log(result)

Upvotes: 0

Jamiec
Jamiec

Reputation: 136104

This can be done with a fairly simple aggregation using reduce:

var result = arrayVal.reduce( (acc,x) => {
  if(!acc[x.DATE]) acc[x.DATE] = {}
  if(!acc[x.DATE][x.TEAM_NO]) acc[x.DATE][x.TEAM_NO] = 0
  acc[x.DATE][x.TEAM_NO]++
  return acc;
}, {});

As you can see there is no need for

  • jQuery $.each
  • JSON.parse(JSON.stringify(arrayVal)) - the data is already a javascript array

Live example below:

const arrayVal = [{
  "DATE": "2020-12-1",
  "NAME": "JAKE",
  "TEAM_NO": 2,
}, {
  "DATE": "2020-12-1",
  "NAME": "ANNA",
  "TEAM_NO": 2,
}, {
  "DATE": "2020-12-1",
  "NAME": "JEFF",
  "TEAM_NO": 1,
}, {
  "DATE": "2020-12-1",
  "NAME": "ERIKA",
  "TEAM_NO": 2,
}, {
  "DATE": "2020-12-1",
  "NAME": "SUTTON",
  "TEAM_NO": 3,
}, {
  "DATE": "2020-12-1",
  "NAME": "ARNOLD",
  "TEAM_NO": 3,
}, {
  "DATE": "2020-12-2",
  "NAME": "JAKE",
  "TEAM_NO": 4,
}, {
  "DATE": "2020-12-2",
  "NAME": "ANNA",
  "TEAM_NO": 2,
}, {
  "DATE": "2020-12-2",
  "NAME": "JEFF",
  "TEAM_NO": 1,
}, {
  "DATE": "2020-12-2",
  "NAME": "ERIKA",
  "TEAM_NO": 3,
}, {
  "DATE": "2020-12-2",
  "NAME": "SUTTON",
  "TEAM_NO": 5,
}, {
  "DATE": "2020-12-2",
  "NAME": "ARNOLD",
  "TEAM_NO": 5,
}, {
  "DATE": "2020-12-3",
  "NAME": "JAKE",
  "TEAM_NO": 1,
}, {
  "DATE": "2020-12-3",
  "NAME": "ANNA",
  "TEAM_NO": 1,
}, {
  "DATE": "2020-12-3",
  "NAME": "JEFF",
  "TEAM_NO": 1,
}, {
  "DATE": "2020-12-3",
  "NAME": "ERIKA",
  "TEAM_NO": 2,
}, {
  "DATE": "2020-12-3",
  "NAME": "SUTTON",
  "TEAM_NO": 3,
}, {
  "DATE": "2020-12-3",
  "NAME": "ARNOLD",
  "TEAM_NO": 3,
}];

var result = arrayVal.reduce( (acc,x) => {
  if(!acc[x.DATE]) acc[x.DATE] = {}
  if(!acc[x.DATE][x.TEAM_NO]) acc[x.DATE][x.TEAM_NO] = 0
  acc[x.DATE][x.TEAM_NO]++
  return acc;
}, {})

console.log(result)

Upvotes: 1

Related Questions