我在用`data.filter`做错了什么

时间:2018-09-19 16:01:23

标签: javascript angular typescript

我正在尝试使用data.filter()过滤数据,因为我需要找到不等于0的元素,直到此处以正确的方式过滤数据为止:

代码

 this.tax = data.filter((item) =>item.value_tax != 0)
                .map((item) => +item.value_tax )
                .reduce((acc, obj) => acc +
               (
                  (((Number(obj.cost) * Number(obj.quantity)) - ((Number(obj.cost) * Number(obj.quantity) * Number(obj.discount)) / 100)) * Number(obj.calculate_tax))
               ) 
               -
               (
                  (((Number(obj.cost) * Number(obj.quantity)) - (Number(obj.cost) * Number(obj.quantity) * Number(obj.discount)) / 100))
               ),
              0);
    console.log("Tax: ", this.tax)

结果控制台

Tax:  
(3) […]
​
0: Object { id_factura_pivote: "1", cantidad_factura_pivote: "3", fecha_factura_pivote: "2018-09-14", … }
​
1: Object { id_factura_pivote: "5", cantidad_factura_pivote: "20", fecha_factura_pivote: "2018-09-14", … }
​
2: Object { id_factura_pivote: "6", cantidad_factura_pivote: "1", fecha_factura_pivote: "2018-09-19", … }
​
length: 3

在我的情况下,我有4个元素,与0仅有3个不同,但它仅带来或显示data的数据,而不是我想要显示给用户的计算。应该注意的是,如果我不使用data.filterdata.map,则会为我带来正确的数据,但它需要4个元素(意外结果),因为我只需要3个元素(在这种情况下)或与0不同的元素。

2 个答案:

答案 0 :(得分:1)

这可能是因为您使用的是单个变量this.tax,所以data.map会覆盖this.tax中data.filter设置的值

答案 1 :(得分:1)

语法不正确。这些逗号没有执行任何操作,因此您的控制台基本上只返回{​​{1}}的结果。这些方法需要链接。

filter

即使如此,如何将数组中的项目映射为数字,然后尝试访问data.filter((item) =>item.value_tax != 0) .map((item) => +item.value_tax ) .reduce((acc, obj) => acc + ( (((Number(obj.cost) * Number(obj.quantity)) - ((Number(obj.cost) * Number(obj.quantity) * Number(obj.discount)) / 100)) * Number(obj.calculate_tax)) ) - ( (((Number(obj.cost) * Number(obj.quantity)) - (Number(obj.cost) * Number(obj.quantity) * Number(obj.discount)) / 100)) ), obj.cost仍然存在问题。您想通过映射完成什么?