2015-08-14 132 views
3

我的目标是确定一个数组是否包含任何伪元素并创建一个没有这些元素的新数组。我想出了一个令人毛骨悚然的丑陋功能,但我无法想出一个更好的写法。JS - 如果语句有很多条件

function bouncer(arr) { 
    var newArray = []; 
    for (var i = 0; i < arr.length; i++) 
    if (arr[i] !== false) { 
     if (arr[i] !== NaN) { 
     if (arr[i] !== "") { 
      if (arr[i] !== 0) { 
      if (arr[i] !== undefined) { 
       if (arr[i] !== null) { 
     newArray.push(arr[i]); 
    }}}}}} 
    return newArray; 


} 

bouncer([7, 'ate', '', false, 9]); 

我尝试使用if语句使用miltiple条件像

if (arr[i] !== false || arr[i] !== "") 

但是,当我这样做,它wouldnt赶上出于某种原因这两个条件。这将是一个更简单的方法来做到这一点?

+2

你需要'如果(ARR [I] ==假&&改编[I] == “”!)'NOT | | – danielmhanover

+0

*提示*:'||'表示***或***'&&'表示***和***。 – Script47

+0

我不认为这段代码有什么问题吗?我经常也有很多if语句。 – bodacydo

回答

1

您正在使用或应该使用并代之以:

if (arr[i] !== false && arr[i] !== "") 
1

检查arr[i]是truthy,然后按价值。

arr[i] && newArray.push(arr[i]); 

完整代码:

function bouncer(arr) { 
    var newArray = [], i; 
    for (i = 0; i < arr.length; i++) { 
     arr[i] && newArray.push(arr[i]); 
    } 
    return newArray; 
} 

或者与Array.filter

newArr = arr.filter(function (a) { return a; }); 
1

@Nina肖尔茨的回答更可读的版本将明确检查感实性,而不依赖于短路。

if (arr[i]) { newArray.push(arr[i]); } 

当然您的情况,您可以使用filter

newArr = arr.filter(function(el){ return el == true; }); 
+1

与真实相比较?真? –

+0

@NinaScholz我想让他清楚我在做什么。 – LukeP