如何基于数组项属性对typescript数组中的值求和?

如何基于数组项属性对typescript数组中的值求和?,typescript,math,Typescript,Math,我在做一个小角度的项目。我有一系列的收据项目,例如可口可乐、芬达、百事可乐、果汁等,当然还有它们的价格和数量 receiptItems: Array<ReceiptItem>; 我如何才能在typescript中获得总额的总和,但仅限于财产税等于“25%”的情况 在C#中,我记得我使用过如下lambda表达式: IEnumerable<ReceiptItems> results = receiptItems.Where(s => s.Tax == "25.00")

我在做一个小角度的项目。我有一系列的收据项目,例如可口可乐、芬达、百事可乐、果汁等,当然还有它们的价格和数量

receiptItems: Array<ReceiptItem>;
我如何才能在typescript中获得总额的总和,但仅限于财产税等于“25%”的情况

在C#中,我记得我使用过如下lambda表达式:

IEnumerable<ReceiptItems> results = receiptItems.Where(s => s.Tax == "25.00");
   totalSum = results.Sum(x => (x.TotalAmount));
IEnumerable results=receiptItems.Where(s=>s.Tax==“25.00”);
totalSum=结果和(x=>(x.TotalAmount));
如何在TypeScript/Angular中实现类似的功能?

JavaScript/TypeScript中的数组也有这些方法。您可以根据您的条件再次
筛选
,然后使用
减少
聚合函数对项目进行求和

const sum = receiptItems.filter(item => item.tax === '25.00')
                        .reduce((sum, current) => sum + current.total, 0);

item.tax===“25.00”
-您必须根据您的逻辑调整此部分

此行的含义是什么?减少((总和,电流)=>总和+电流。总计,0)
reduce
是一个聚合函数,类似于C#中的
Aggregate
。它得到迭代中每个项目的总数,在这种情况下,我们将每个项目的
total
total
(总和)相加,最后得到sum@RoxyPro:没有直接的JavaScript等价于
Sum()
LINQ函数。但是
Sum()
可以使用
Aggregate()
编写。我喜欢像您一样的拆分操作:
filter
然后使用
reduce
求和@roxypro:注意,当filter生成一个中间数组时,如果
receiptItems
包含大量项,过滤部分可以直接在
reduce
中完成:
receiptItems.reduce((sum,x)=>sum+(x.tax==“25.00”?x.total:0))
const sum = receiptItems.filter(item => item.tax === '25.00')
                        .reduce((sum, current) => sum + current.total, 0);