2015-08-14 135 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