Как подсчитать количество вхождений различных значений из массива объектов в Javascript?
У меня есть массив объектов, как показано ниже:
var array =
[
{"name":"abc","age":20}
{"name":"abc","age":20}
{"name":"abc","age":20}
{"name":"xyz","age":21}
{"name":"xyz","age":21}
]
Я хочу подсчитать количество вхождений различных значений, таких как:
[3,2]
Предполагая, что abc
имеет 3 вхождения и xyz
имеет 2 вхождения.
Я делаю это в reactjs
. Я могу получить различные значения, такие как [abc,xyz]
, используя Этот ответ.
предпочтителен синтаксис ES6.
4 ответа:
Вам нужно будет знать, к какому имени принадлежит счетчик, поэтому я предлагаю выводить не массив, который не дает вам никакого ключа к этому, а объект, помеченный именами и имеющий в качестве значения соответствующий счетчик:
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 }
Вы можете использовать
forEach/map
для итерации массива и сохранения количества в другой переменной, проверьте это:
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);