如何计算Javascript中对象数组中不同值的出现次数?

Tri*_*ani 6 javascript arrays ecmascript-6 reactjs

我有一个像下面的对象数组:

var array =
    [
        {"name":"abc","age":20}
        {"name":"abc","age":20}
        {"name":"abc","age":20}
        {"name":"xyz","age":21}
        {"name":"xyz","age":21}
    ]
Run Code Online (Sandbox Code Playgroud)

我想计算不同值的出现次数,例如:

[3,2]
Run Code Online (Sandbox Code Playgroud)

假设abc有3次出现并且xyz有2次出现.

我正在这样做reactjs.我能够获得不同的值,比如[abc,xyz]使用这个答案.

ES6语法是首选.

tri*_*cot 14

你需要知道一个计数属于哪个名字,所以我建议你不要输出一个数组,它不会给你任何线索,而是一个由名字键入的对象,并带有相应计数值:

var result = array.reduce( (acc, o) => (acc[o.name] = (acc[o.name] || 0)+1, acc), {} );
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)


Nor*_*ard 5

映射/减少救援:

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 }
Run Code Online (Sandbox Code Playgroud)