2017-02-10 15 views
4

У меня есть список объектов с балансами (есть и другие свойства в объектах, но не ввезенные для примера):Угловые 2 трубы - расчет резюме массива объектов

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

Я ищу смарт-трубу, которые будут подводить (другие будут средними) остатки в массиве (предпочли бы не использовать для цикла - но некоторые функции ES6 как уменьшить, но не уверены, как)

ответ

11

Вам нужно будет написать свою собственную трубу, ниже должна дать вам то, что вам нужно. Он принимает атрибут объекта, который вы хотите просуммировать в качестве параметра

Сумма

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; 
} 
+0

Ваш код вернет 'NaN'. –

+0

Вы уверены, что работает для меня –

+0

Да, сейчас это работает. :) –