0

I want to parse the json data and want to get the count for Leadstage.Now I want to get the count leadstage based geo.

 {
    "Geo" :"US East"  
    "LeadStage": "SGL",
    "count": 6
  },

Partial working with my code. need to get based on geo also.

 var data = {
   "leads":{
      "data":[
         {
            "UserName":"Tharun Sairam",
            "Geo":"US East",
            "LeadStage":"SGL"
         },
         {
            "UserName":"Tharun Sairam",
            "Geo":"US East",
            "LeadStage":"MGL"
         },
         {
            "UserName":"Praveen Kumar",
            "Geo":"US West",
            "LeadStage":"SGL"
         },
         {
            "UserName":"Souvik bhattacharya",
            "Geo":"US East",
            "LeadStage":"SGL"
         },
         {
            "UserName":"Denisse Morales",
            "Geo":"NSU",
            "LeadStage":"MGL"
            
         },
         {
            "UserName":"Souvik bhattacharya",
            "Geo":"US East",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Souvik bhattacharya",
            "Geo":"US East",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Souvik bhattacharya",
            "Geo":"US East",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Anthony Susairaj",
            "Geo":"US West",
            "LeadStage":"RGL"
            
         },
         {
            "UserName":"Vivek Sharma",
            "Geo":"NSU",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Souvik bhattacharya",
            "Geo":"US East",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Arvind Partha",
            "Geo":"US West",
            "LeadStage":"SGL"
            
         },
         {
            "UserName":"Kaviarasan Selvaraj",
            "Geo":"NSU",
            "LeadStage":"SGL"
         },
         {
            "UserName":"Tharun Sairam",
            "Geo":"US East",
            "LeadStage":"MGL"
           
         }
      ]
     } 
};

function groupByLeadStage (arr) {
                        var groupBy = {};
                        $.each(arr, function () {
                        groupBy[this.LeadStage] = 1 + (groupBy[this.LeadStage] || 0);
                        });
                        return groupBy;
                    }
                    function createArray(obj){
                        var arr = [];
                        Object.keys(obj).forEach(function(key){
                        arr.push({
                        LeadStage: key,
                        count:obj[key]
                        });        
                        });
                        return arr;
                    }

                    var resObj = groupByLeadStage(data.leads.data);
                    var resArray = createArray(resObj);
                    console.log(resArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

1
  • 1
    checkout reduce() Commented Jun 29, 2020 at 9:30

2 Answers 2

3

You need to use reduce, in this case you can do without JQuery

const data = {
    leads: {
        data: [
            {
                UserName: 'Tharun Sairam',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Tharun Sairam',
                Geo: 'US East',
                LeadStage: 'MGL',
            },
            {
                UserName: 'Praveen Kumar',
                Geo: 'US West',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Souvik bhattacharya',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Denisse Morales',
                Geo: 'NSU',
                LeadStage: 'MGL',
            },
            {
                UserName: 'Souvik bhattacharya',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Souvik bhattacharya',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Souvik bhattacharya',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Anthony Susairaj',
                Geo: 'US West',
                LeadStage: 'RGL',
            },
            {
                UserName: 'Vivek Sharma',
                Geo: 'NSU',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Souvik bhattacharya',
                Geo: 'US East',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Arvind Partha',
                Geo: 'US West',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Kaviarasan Selvaraj',
                Geo: 'NSU',
                LeadStage: 'SGL',
            },
            {
                UserName: 'Tharun Sairam',
                Geo: 'US East',
                LeadStage: 'MGL',
            },
        ],
    },
};

const result = data.leads.data.reduce((acc, lead) => {
    const tryFind = acc.find(l => l.Geo === lead.Geo && l.LeadStage === lead.LeadStage);

    if (tryFind) {
        tryFind.count++;
    } else {
        acc.push({ Geo: lead.Geo, LeadStage: lead.LeadStage, count: 1 });
    }

    return acc;
}, []);

console.log(result);

Sign up to request clarification or add additional context in comments.

Comments

1

You can make use of reduce and take Object.values of it after the process done:

var data = { "leads":{ "data":[ { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"MGL" }, { "UserName":"Praveen Kumar", "Geo":"US West", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Denisse Morales", "Geo":"NSU", "LeadStage":"MGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Anthony Susairaj", "Geo":"US West", "LeadStage":"RGL" }, { "UserName":"Vivek Sharma", "Geo":"NSU", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Arvind Partha", "Geo":"US West", "LeadStage":"SGL" }, { "UserName":"Kaviarasan Selvaraj", "Geo":"NSU", "LeadStage":"SGL" }, { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"MGL" } ] } };

var result = Object.values(data.leads.data.reduce((acc, {UserName, ...rest})=>{
    const key = Object.values(rest).join('|');
    acc[key] = acc[key] || {...rest, count:0};
    acc[key].count++;
    return acc;
},{}));

console.log(result);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.