这是对以下问题的跟进问题:
Javascript Equivalent to C# LINQ Select
我们正在使用Angular 2 + TypeScript:
我有一个对象数组。数组中的每个对象都包含一个名为“StudentType”的属性。
我需要运行一个C#LINQ样式查询,该查询提取数组中的StudentType列表以及具有该特定类型的数组成员的数量。
虽然我可以做一个老式的循环,但是我想知道是否有更好的方法,例如C#LINQ GroupBy提供的功能。
由于我们使用的是Angular 2,因此项目负责人不允许使用JQuery。
最佳答案
我只是组成了一些用于测试的StudentType值,但是您可以使用Array.prototype.reduce()遍历输入数组的每个元素,并添加或操作累加器对象的属性。
let arr = [{
studentType: 'freshman'
},
{
studentType: 'senior'
},
{
studentType: 'sophomore'
},
{
studentType: 'freshman'
},
{
studentType: 'junior'
},
{
studentType: 'senior'
},
{
studentType: 'sophomore'
},
{
studentType: 'freshman'
},
{
studentType: 'sophomore'
},
{
studentType: 'freshman'
}
];
let result = arr.reduce((prev, curr) => {
isNaN(prev[curr.studentType]) ? prev[curr.studentType] = 1 : prev[curr.studentType]++;
return prev;
}, {});
console.log(result);