Как подсчитать количество вхождений различных значений из массива объектов в 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 4

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 }

Быстрый ответ: new Set(array).size.

Вы можете использовать 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);