-3
[
    {
        "assetNo":"51GQA21AP001"
    },
    {
        "assetNo":"51GQA22AP001"
    },
    {
        "assetNo":"51GQA24AP001"
    },
     {
        "assetNo":"51GQA22AP001"
    },
     {
        "assetNo":"51GQA21AP001"
    },
     {
        "assetNo":"51GQA23AP001"
    },
    {
        "assetNo":"51GQA24AP001"
    }
]

I need the output following:

[{
  "assetNo": "51GQA21AP001",
  "count": 2
}, {
  "assetNo": "51GQA22AP001",
  "count": 2
}, , {
  "assetNo": "51GQA23AP001",
  "count": 2
},{
  "assetNo": "51GQA24AP001",
  "count": 1
}]
stefanobaghino
  • 11,253
  • 4
  • 35
  • 63
  • And have you tried anything yet? – Rajesh Feb 19 '18 at 06:34
  • You can take reference from here: https://stackoverflow.com/questions/19233283/sum-javascript-object-propertya-values-with-same-object-propertyb-in-array-of-ob – Rajesh Feb 19 '18 at 06:36

2 Answers2

1

Here you go :

var data = [
    {
        "assetNo":"51GQA21AP001"
    },
    {
        "assetNo":"51GQA22AP001"
    },
     {
        "assetNo":"51GQA24AP001"
    },
     {
        "assetNo":"51GQA22AP001"
    },
     {
        "assetNo":"51GQA21AP001"
    },
     {
        "assetNo":"51GQA23AP001"
    },
     {
        "assetNo":"51GQA24AP001"
    }
]


let count = {};
data.forEach(el => {
    count[el.assetNo] = count[el.assetNo] ? count[el.assetNo]+1 : 1; 
})

let lastResult = [];
for (var key in count) {
  lastResult.push({ assetNo : key , count : count[key] });
}

console.log(lastResult);
Vivek Doshi
  • 56,649
  • 12
  • 110
  • 122
1

You can use array#reduce to group your array based on assetNo.

var data = [{ "assetNo": "51GQA21AP001" }, { "assetNo": "51GQA22AP001" }, { "assetNo": "51GQA24AP001" }, { "assetNo": "51GQA22AP001" }, { "assetNo": "51GQA21AP001" }, { "assetNo": "51GQA23AP001" }, { "assetNo": "51GQA24AP001" } ],
  result = Object.values(data.reduce((r,o) => {
    r[o.assetNo] = r[o.assetNo] || {assetNo : o.assetNo, count : 0};
    r[o.assetNo].count += 1;
    return r;
  },{}));
console.log(result);
Hassan Imam
  • 21,956
  • 5
  • 41
  • 51