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

IT技术 javascript arrays reactjs ecmascript-6
2021-04-13 21:03:05

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

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 语法是首选。

6个回答

您需要知道计数属于哪个名称,因此我建议不要输出一个不提供任何线索的数组,而是输出一个以名称为键的对象,并将相应的计数作为值:

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

映射/减少到救援:

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);

快速回答:new Set(array).size

说明(来自 MDN Web 文档):

Set 对象允许您存储任何类型的唯一值,无论是原始值还是对象引用

我认为您误解了这个问题:Set 的大小将与 Array 的长度相同,因为 OP 数组中的所有对象都是不同的。如果某些对象在该数组中被多次引用,您只会得到不同的结果,但对于 OP 所呈现的内容而言并非如此:他们的问题不是寻找唯一的对象引用,而是寻找具有唯一属性值的对象(即 name) 在那些不同的对象中。
2021-06-03 21:03:05
那只会返回数组的长度。那不是提问者想要的。
2021-06-15 21:03:05
@特林科特不。它将重新运行包含独特元素的 Set 的基数。
2021-06-17 21:03:05

如果有人寻找存储在数组中的不同计数

var result = array.reduce( (acc, o) => (acc[o.name] = (acc[o.name] || 0)+1, acc), {} );
result = Object.values(result); // returns an array of values from the object
// result will be [3,2]