2016-08-11 84 views
0

我有這樣的循環,我想執行其他的只如果沒有的,如果條件得到滿足循環。 for循環會一直運行,直到數據庫中的每個項目都被檢查完畢。如果數據庫中沒有任何項目匹配用戶輸入,那麼我想運行其他。執行else語句如果沒有項目被發現

眼下,它運行後其他權的第一次嘗試,這意味着,如果該項目相匹配的是最後一排,它只是把它的錯誤頁面,因爲它停止在評價第一次迭代。

for(var i=0; i< rows.length; i++) { 

    if (rows[i].hashtag == userEnteredHashtag) { 
    // Display the choose Box page 
    res.render('chooseBox', {}); 
    } 


    else { 
    // Display the invalid hashtag page 
    res.render('invalidHashtag', {}); 
    } 
} 
+0

直接檢查數據庫是否容易? ({!返回o.hashtag == userEnteredHashtag} O =>) – adeneo

+0

沒錯,但我跑了一些問題,以及一些安全原因,我覺得這是更好的選擇 – John

+0

anywho'rows.every;' – adeneo

回答

2

只需推動else部分循環之外,它基於標記

var wasFound = false; 
for (var i = 0; i < rows.length; i++) { 

    if (rows[i].hashtag == userEnteredHashtag) { 
    // ... 
    wasFound = true; // set the flag here 
    } 
} 

if (!wasFound) { 
    res.render('invalidHashtag', {}); 
} 
1

所以外面添加一個檢查執行。

var hasMatch = false; 
for (var i = 0; i < rows.length; i++) { 

    if (rows[i].hashtag == userEnteredHashtag) { 
    // Display the choose Box page 
    res.render('chooseBox', {}); 
    hasMatch = true; 
    } 
} 

if (!hasMatch) { 
    // Display the invalid hashtag page 
    res.render('invalidHashtag', {}); 
} 
1

創建一個變量來跟蹤你的條件是否已經滿足:

var isValid = true; 
    for(var i=0; i< rows.length; i++) { 
     if (rows[i].hashtag != userEnteredHashtag) { 
     isValid = false 
     } 
    } 
    isValid ? res.render('chooseBox') : res.render('invalidHashtag') 
1

另一種方法是使用filterforEach

var rows = [{hashtag: '#a'}, {hashtag: 'b'}, {hashtag: 'c'}]; 
var userEnteredHashTag = '#a'; 
var matchingRows = rows.filter(row => row.hashtag === userEnteredHashTag); 

if (matchingRows.length) { 
    matchingRows.forEach(row => console.log(row)); 
} else { 
    console.log('invalid'); 
}