我有一个数组,看起来像:
var data = [
{
student: "sam",
English: 80,
Std: 8
},
{
student: "sam",
Maths: 80,
Std: 8
},
{
student: "john",
English: 80,
Std: 8
},
{
student: "john",
Maths: 80,
Std: 8
}
];不管学生是什么科目,我都要拿到总分。
通过对数据数组按学生姓名进行过滤,然后循环过滤数据,即可得到个别学生的总分。
在类型记录中是否有类似于SQL的groupBy函数。
发布于 2018-10-10 13:27:00
这似乎可以通过数组上的一个简单的约简方法来完成。还原将遍历数组,并将每个项传递到提供的谓词函数中。每次迭代都应该返回累加器obj/array/val。
我不确定您希望数据结构是什么,但是您可以通过传递给reduce的函数的内部工作来控制该结构。
studentScores = this.data.reduce((accumulator, item) => {
const key = Object.keys(item)
.filter(k => k !== 'student')
.filter(k => k !== 'Std')[0];
const prevValue = accumulator[item.student] || 0;
const studentName = item.student;
accumulator[studentName] = prevValue + item[key];
return accumulator;
}, {});我在https://stackblitz.com/edit/angular-xcjzzf的stackblitz中发布了一个工作示例
发布于 2018-10-10 15:54:30
你得用字典来做。使用简单的分组方法,map.there标记的名称正在更改,因此任务是difficult.This是stackblitz链接。
https://stackoverflow.com/questions/52739051
复制相似问题