Javascript 以这种方式对对象数组进行排序,频率

Javascript 以这种方式对对象数组进行排序,频率,javascript,angularjs,Javascript,Angularjs,我有这种类型的对象数组 students = [ { "name": "Ana Barbique", "category":"B" } { "name": "Marko Polo", "category":"B" } { "name": "Nick Harper", "category":"A" } ] 我希望它具有这种类型的对象数组: sum = [

我有这种类型的对象数组

students = [
    {
        "name": "Ana Barbique",
        "category":"B"
    }
    {
        "name": "Marko Polo",
        "category":"B"
    }
    {
        "name": "Nick Harper",
        "category":"A"
    }
]
我希望它具有这种类型的对象数组:

sum = [
    {
        "category": "A",
        "count" : 1
    }
    {
        "category": "B",
        "count" : 2
    }
]

所以本质上我想让数组中的对象有出现在学生和他们计数中的类别。顺序不重要。我以前没有这样做过。

首先通过减少
学生
数组来创建categories count对象

const categories = students
   .reduce((cat, student) => (
       cat[student.category]++ || (cat[student.category] = 1), cat
   ), {})
然后迭代类别的键以创建所需的数组

const sum = Object
   .keys(categories)
   .map(name => ({category: name, count: categories[name]}))

这是一种纯粹的循环和查找方法。尤里·塔拉班科的回答更简洁

这种方法的关键是使用check数组对象保存sum[]数组中每个类别的索引。这是一种有用的技巧

var学生=[
{
“姓名”:“安娜·巴比克”,
“类别”:“B”
},
{
“姓名”:“马可波罗”,
“类别”:“B”
},
{
“姓名”:“尼克·哈珀”,
“类别”:“A”
}
]
var总和=[],检查=[],obj;
对于(变量i=0;ilog('sum='+JSON.stringify(sum))
您尝试过如何创建
sum
对象?在你的问题中添加一个你已经尝试过的例子。昆汀-查看另一个关于这类事情的答案很好的问题:Yury-我尝试了你的答案并得到了“信息”:“未捕获的语法错误:缺失)在参数列表之后“,”错误。您能编辑您的答案并添加一个工作片段吗?复制时遗漏了一个右括号。谢谢