バランスのあるオブジェクトのリストがあります(オブジェクトには他のプロパティがありますが、たとえばインポートされていません):
[{ balance : 100 },{ balance : 200 },{ balance : null },{ balance : 300 }]
配列内のバランスを合計する(他は平均する)スマートパイプを探しています(forループを使用したくないが、reduceなどのES6機能の一部は方法がわかりません)
あなたはあなた自身のパイプを書く必要があるでしょう、以下はあなたが何を求めているかをあなたに与えるはずです。合計したいオブジェクトの属性をパラメータとして受け取ります
合計
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;
}