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

Javascript: How to make _.compact ignore 0 as a falsy value?

我目前正在提取在 html table 中输入的实时数据,并从每列值中计算出某个值。为此,我需要使用 _.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

有办法吗?

提前致谢。

解决方案取决于 operand 提取的内容。如果它 returns 0,则该值将在随后对 compact 的调用中删除。你可以试试这个:

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

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

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

Docs:

compact

Returns a copy of the list with all falsy values removed. In JavaScript, false, null, 0, "", undefined and NaN are all falsy.

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