web-dev-qa-db-ja.com

Angular 2パイプ-オブジェクトの配列の要約を計算する

バランスのあるオブジェクトのリストがあります(オブジェクトには他のプロパティがありますが、たとえばインポートされていません):

[{ balance : 100 },{ balance : 200 },{ balance : null },{ balance : 300 }]

配列内のバランスを合計する(他は平均する)スマートパイプを探しています(forループを使用したくないが、reduceなどのES6機能の一部は方法がわかりません)

8
bensiu

あなたはあなた自身のパイプを書く必要があるでしょう、以下はあなたが何を求めているかをあなたに与えるはずです。合計したいオブジェクトの属性をパラメータとして受け取ります

合計

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'sum'
})
export class SumPipe implements PipeTransform {
    transform(items: any[], attr: string): any {
        return items.reduce((a, b) => a + b[attr], 0);
    }
}

他のパイプと同じように使用してください

<span>{{ balances | sum:'balances' }}</span>

平均

平均的なパイプの場合は、合計パイプと同様のロジックを使用します。これにより、nullが0として扱われます。

transform(items: any, attr: string): any {
    let sum = items.reduce((a, b) => a + b[attr], 0);
    return sum / items.length;
}
15