Javascript过滤功能,用于过滤掉虚假值

时间:2017-03-22 15:43:17

标签: javascript

我正在学习javascript并使用以下代码从字符串中过滤出虚假值。

function isFalsy(value) {
  if(value === false) 
    return false;
  if(value === null)
   return false;
  if(value === 0)
   return false;
  if (value ==="")
   return false;
  if (value === undefined)
   return false;
  if(value.isNaN)
   return false;

  return true;

}
function bouncer(arr) {

  arr = arr.filter(isFalsy);
  return arr;
}

我运行以下内容:

bouncer([1, null, NaN, 2, undefined]);

我的结果除外:

[1,2] 

但它给了我

[1,null, 2]

发生了什么事?

3 个答案:

答案 0 :(得分:3)

问题不是null,而是NaN;证明:



function isFalsy(value) {
  if(value === false) 
    return false;
  if(value === null)
   return false;
  if(value === 0)
   return false;
  if (value ==="")
   return false;
  if (value === undefined)
   return false;
  if(value.isNaN)
   return false;

  return true;

}
function bouncer(arr) {

  arr = arr.filter(isFalsy);
  return arr;
}

console.log(bouncer([1, null, NaN, 2, undefined]));




原因是if(value.isNaN)检查isNaN上名为value的属性是否真实。正确的检查是if (isNaN(value)),因为isNaN是用于测试NaN的内置函数(因为NaN === NaNfalse,因此您无法检查function isFalsy(value) { if(value === false) return false; if(value === null) return false; if(value === 0) return false; if (value ==="") return false; if (value === undefined) return false; if(isNaN(value)) return false; return true; } function bouncer(arr) { arr = arr.filter(isFalsy); return arr; } console.log(bouncer([1, null, NaN, 2, undefined]));检查那样):



isFalsy




也就是说,从过滤器回调中返回任何有价值的值都会删除该条目,因此您根本不需要 arr = arr.filter(function(value) { return value; }); (除了用于学习目的):

function bouncer(arr) {

  arr = arr.filter(function(value) { return value; });
  return arr;
}

console.log(bouncer([1, null, NaN, 2, undefined]));



"LOTS 1, 2 & 3 -50 X 140 EACH-"                 
"PLOTS 17 & 18 -50 X150' EACH-"




答案 1 :(得分:2)

在很多条件下,你不必使用这整个复杂的功能。

只需使用.filter(v => v)即可删除每个falsy值。

vArray#filter函数的参数。我们过滤每个truthy值并将其传递给res变量。虚假值 - [0, false, "", null, undefined, NaN]不会被过滤(传递)。



var arr = [1, null, NaN, 2, undefined, '', 0],
    res = arr.filter(v => v);
    console.log(res);




答案 2 :(得分:0)

您只需使用Array#filter()

即可



console.log(bouncer([1, null, NaN, 2, undefined]));

function bouncer(arr){
  return arr.filter(a=>a);
}