Javascript:如何使_.compact忽略0作为虚假值?

时间:2019-04-08 10:24:57

标签: javascript underscore.js

我目前正在提取html表中输入的实时数据,并从每个列值中计算出某个值。为此,我需要使用_.chain()_.pluck,并刮除nullundefined之类的值,我正在使用_.compact(),如下所示:

var vals = _.chain(values).pluck(operand).compact().value();

但是这也会删除0的值。相反,我想保留0的值。它适用于0.1等所有内容,但不适用于0。

For this array: 
0: {A: 4}
1: {T: 6}
2: {A: 1}
3: {T: 6}
when operand='A', vals=4,1 ==> size of vals[] = 2

但是

For this array: 
0: {A: 4}
1: {T: 6}
2: {A: 0}
3: {T: 6}
when operand='A', vals=4 ==> size of vals[] = 1 //missing value 0

有没有办法做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:3)

解决方案取决于operand提取的内容。如果返回0,则后续调用compact会删除该值。您可以尝试以下方法:

_.chain(values).pluck(operand).filter(x => x != null).value()

x != null部分删除了任何null和/或undefined值,但其余部分保持不变。

答案 1 :(得分:3)

这不是.pluck的错,而是.compact的错:

Docs

  

紧凑

     

返回列表的副本,其中所有虚假值均已删除。在JavaScript中, false,null,0,“”,未定义 NaN 都是虚假的。

您可以通过使用.filter(v => !!v || v === 0)而不是.compact()来避免这种情况。