How to count number of occurrences of distinct values from an array of objects in Javascript?
12,817
Solution 1
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);
Solution 2
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 }
Solution 3
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);
Comments
-
Triyugi Narayan Mani almost 2 years
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 andxyz
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.
-
trincot over 5 yearsThat will just return the length of the array. That is not what the asker wants.
-
ghilesZ over 5 years@trincot Nope. It will retrun the cardianality of the Set, which contains unique elements.
-
trincot over 5 yearsI think you misinterpreted the question: the size of the Set will be the same as the length of the Array as all objects in the OP's array are distinct. You would only get a difference if some objects were referenced multiple times in that array, but that is not so for what the OP presents: their question is not to look for unique object references, but for objects that have a unique property value (i.e.
name
) in those distinct objects.