poopy
poopy

Reputation: 45

Want to count number of each team numbers in each day from json array with jquery

I have a JSON array like this and

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 an array/object like this

    {
        "DATE": "2020-12-1",
        "TEAM_NO": 3, 
        "TEAM_NO_COUNT": 2, // 2 entries with no 3 team
         
    }, {
        "DATE": "2020-12-1",
        "TEAM_NO": 1,
        "TEAM_NO_COUNT": 2,  // 2 entries with no 1 team
    }, {
        "DATE": "2020-12-2",
        "TEAM_NO": 4,
        "TEAM_NO_COUNT": 1,  
    }

How can I get a result like this using any juery /javascript method(using reduce or anything) . Please give me a help with this. A simpler way would be better.

Upvotes: 1

Views: 53

Answers (1)

StepUp
StepUp

Reputation: 38094

It is possible to use reduce method:

const result = arrayVal.reduce((a, c)=>{
    a[c.TEAM_NO] = a[c.TEAM_NO] 
        || {  DATE: c.DATE, TEAM_NO: c.TEAM_NO, TEAM_NO_COUNT: 0 };
    a[c.TEAM_NO].TEAM_NO_COUNT++;
    return a;
}, {})

As mdn says:

The reduce() method executes a reducer function (that you provide) on each element of the array, resulting in single output value.

An example:

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((a, c)=>{
    a[c.TEAM_NO] = a[c.TEAM_NO] || {  DATE: c.DATE, TEAM_NO: c.TEAM_NO, TEAM_NO_COUNT: 0 };
    a[c.TEAM_NO].TEAM_NO_COUNT++;
    return a;
}, {})

console.log(result);

Upvotes: 1

Related Questions