I have an array of objects like below:
var array =
    [
        {"name":"abc","age":20}
        {"name":"abc","age":20}
        {"name":"abc","age":20}
        {"name":"xyz","age":21}
        {"name":"xyz","age":21}
    ]
I want to count the number of occurrences of distinct values like:
[3,2]
Assuming abc has 3 occurrences and xyz has 2 occurrences.
I am doing it in reactjs. I am able to get distinct values like [abc,xyz] using this answer.
ES6 syntax is preferred.
You'll need to know to which name a count belongs, so I propose not to output an array that gives you no clue about that, but an object keyed by names and with as value the corresponding count:
var result = array.reduce( (acc, o) => (acc[o.name] = (acc[o.name] || 0)+1, acc), {} );
var array =
    [
        {"name":"abc","age":20},
        {"name":"abc","age":20},
        {"name":"abc","age":20},
        {"name":"xyz","age":21},
        {"name":"xyz","age":21}
    ];
    
var result = array.reduce( (acc, o) => (acc[o.name] = (acc[o.name] || 0)+1, acc), {} );
console.log(result);
Map/Reduce to the rescue:
const frequency = array
  .map(({ name }) => name)
  .reduce((names, name) => {
    const count = names[name] || 0;
    names[name] = count + 1;
    return names;
  }, {});
// frequency: { abc: 3, xyz: 2 }
                        You can use forEach/map to iterate the array and store the count in another variable, Check this:
var array = [
     {"name" : "abc", "age" : 20},
     {"name" : "abc", "age" : 20},
     {"name" : "abc", "age" : 20},
     {"name" : "xyz", "age" : 21},
     {"name" : "xyz", "age" : 21},
];
    
let b = {};
array.forEach(el => {
    b[el.name] = (b[el.name] || 0) + 1;
})
console.log(b);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With