javascript - Angular 2 - 对从可观察对象发送的对象中的属性值求和

标签 javascript typescript angular rxjs rxjs5

在我的 service.component.j 中,我从 http 调用返回一个 Student 数组的可观察对象。学生对象有一个属性叫做年龄,

学生.ts

export class Student {
  id: number;
  name: string;
  age:number;
}

服务.componnet.js

getStudents (): Observable< Student[]> 

在作为上述可观察对象的观察者的 studentManagement.component.ts 中,我想对学生的年龄求和。我知道我可以在源代码中放置一个 sum() (这是不太受欢迎的,因为我还需要在页面中显示学生的其他信息,例如 id、姓名、个人年龄。)或从 _studentList 计算它。除了这两个,还有别的办法吗?

private _studentList:Student[]=[];

    .subscribe(
            returnedStudents => {
              console.log(returnedStudents);
              this._studentList = returnedStudents;
            },
            erroMsg => this._errorMessage = erroMsg
          ) 

最佳答案

你可以使用 map在 Observable 上返回总和。

getStudents().map(arr => arr.reduce((a, b) => a + b.age, 0));

这里我们将内部数组缩减为学生年龄属性的总和。现在我们有一个 Observable<number> ,它将发出年龄的总和。

如果你想同时显示:

getStudents (): Observable< Student[]> {
   return this.http.get(/*...*/).share();
}

getAgeSum(): Observable<number> {
    return this.studentsObservable
       .map(arr => arr.reduce((a, b) => a + b.age, 0));
}

我们必须在这里调用 share,这样 Observable 就变热了,并且不会做两次 HTTP 请求。

关于javascript - Angular 2 - 对从可观察对象发送的对象中的属性值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109928/

相关文章:

javascript 每 5 秒点击一个链接

javascript - fastify中修改或保存request对象中的数据

javascript - 如何将 jquery 类型导入到 typescript

css - IE 11 Edge DevTools 没有计算样式

javascript - Typescript with Angular2 - 针对 ES5 会产生错误?

javascript - 集成 GWT 和 angular2

javascript - 如何处理哪个子进程获得 socket.io 套接字句柄

typescript - 如何使用 Typescript、Serenity 和 Cucumber 创建剧本模式项目?

node.js - ASP.NET Core 系统找不到指定的文件

javascript - 如何用javascript模拟点击 anchor 标签?