2016-11-30 95 views
-1

我有以下代碼從else子句返回FALSE

elements.filter(function(_, e){ 
    terms.forEach(function(term) { 
    returnValue = true; 
    if(...) { 
    } else { 
     returnValue = false; 
    } 
    }) 
    return returnValue; 
}) 

,我不知道是否有從else子句return false直接一個更清潔的方式,而不是使用一個臨時變量,因爲它是一種討厭被迫使用returnValue

感謝

+0

可以使用返回false,而不是使用標誌/臨時變量 –

+0

去掉無用的,如果塊,但他要返回真值,以及在這種情況是真的 – GraveyardQueen

+3

forEach每次都會導致LAST迭代後的值(除非其他邏輯沒有顯示,否則會覆蓋那個值)...嘗試使用數組的'every'方法 - 至於上面的註釋...以' forEach'不是答案,因爲在forEach中返回不會停止forEach或導致包含函數返回 –

回答

2

使用array#every - 該網頁有老人的瀏覽器

elements.filter(function(_, e) { 
    return terms.every(function(term) { 
     if (...) { 
      ... 
      return true; 
     } else { 
      return false; 
     } 
    }); 
}) 

請注意,您return term.every....

Array#every調用回調,直到回調返回false,在這種情況下返回值填充工具通過Array#every將是假的,如果所有的迭代都返回true,返回的值將爲Array#every ......所以回報必須爲真爲它返回true,否則返回false並停止迭代

+0

感謝您的回覆,如果我錯了,請糾正我的錯誤,但在您的情況下,如果第一項是真實的,我將返回true,但是,如果所有術語均爲真,我希望返回true。 – macsig

+0

感謝您的提示,我錯過了;) – macsig

+0

不,返回true會保持循環 - 因爲您發佈了模糊的代碼,我不能比上面的代碼更有用......條件是什麼?如果條件成立,你會怎麼做?在問題中未知,所以我在焦慮中盡力而爲 –

0

爲什麼不 return false; 從在foreach的事情嗎? 除非你有在返回之前至少通過所有項目一次。這應該讓你跳過使用額外的變量。

實際上,你可以得到由否定表達

if(!your-expression) 
    { 
    return false; 
    } 
    return true; 
+2

if/else在'.forEach'中 - 將'.forEach'的返回值忽略 –