首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角4 GroupBy阵列数据

角4 GroupBy阵列数据
EN

Stack Overflow用户
提问于 2018-10-10 11:19:15
回答 2查看 711关注 0票数 0

我有一个数组,看起来像:

代码语言:javascript
运行
复制
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函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-10 13:27:00

这似乎可以通过数组上的一个简单的约简方法来完成。还原将遍历数组,并将每个项传递到提供的谓词函数中。每次迭代都应该返回累加器obj/array/val。

我不确定您希望数据结构是什么,但是您可以通过传递给reduce的函数的内部工作来控制该结构。

代码语言:javascript
运行
复制
  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中发布了一个工作示例

票数 1
EN

Stack Overflow用户

发布于 2018-10-10 15:54:30

你得用字典来做。使用简单的分组方法,map.there标记的名称正在更改,因此任务是difficult.This是stackblitz链接。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52739051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档