2011-04-23 64 views
-1

我有一個if語句:更簡單的格式化if語句的方法?

if(firstString == "no" && secondString == "no" && thirdString == "no"){ 
    // Do stuff here 
} 

有沒有格式化這個更漂亮的呢?使用false而不是"no"不是一種選擇,因爲我要檢查的數據來自AJAX請求,我不控制它的輸出。否則,我會寫這樣說:

if(!firstString && !secondString && !thirdString){ 
    // Do stuff here 
} 

感謝

UPDATE:

我知道這完全是荒謬的,但它發生,我認爲這實際上可能是最短的途徑:

if(firstString + secondString + thirdString == "nonono"){ 
    // Do stuff here 
} 
+0

事先已知串的數量,或者是類似於可能包含任何數量的字符串數組? – 2011-04-23 03:04:11

+0

事先知道。 – 2011-04-23 03:10:04

+1

簡答:不,沒有一種簡單的方法可以簡化。 – 2011-04-23 03:10:32

回答

3

鑑於串的數量是預先知道的,那麼你有2個選項,據我可以看到...

  1. 保持原樣。 if語句不難閱讀,任何其他格式都可能是複雜或更復雜的。

  2. 當您從AJAX請求中檢索數據時,將字符串轉換爲布爾值,以便存儲TRUE或FALSE而不是「yes」和「no」。這將允許你使用你的首選if語句格式,如果你做了很多字符串比較,可能會比許多字符串比較更有效率。

最後,你要做的是由你決定,但是我個人認爲最好是堅持你的所得。不要擔心格式化if語句,這很明顯,它在做什麼,在我看來並不需要改變。

+0

感謝您的幫助。 – 2011-04-23 03:20:46

1

如果( 「無」 == firstString & & firstString == secondString & & secondString == thirdString)

1
function F(var value){ 
    return value === "no"; 
} 

if(F(firstString) && F(secondString) && F(thirdString)){ 
    // Do stuff here 
} 
+0

爲什麼你會否定函數中的等式,並在函數外面再次否定? – 2011-04-23 03:11:11

+0

只是因爲它似乎比''IsFalse(value)' – bevacqua 2011-04-23 03:33:17

+0

'這樣的函數更直觀,因爲三個函數將被調用而不是三個比較,這會是一個開銷嗎? – Anji 2011-04-23 04:19:17

1

對不起,沒有想到 - 這就是如果你的任何檢查是否是 '不'

if ($.inArray('no', [firstString, secondString, thirdString]) >= 0) { 
    // Do something if the value is 'no' 
} 

修訂ANSWER

不幸,jQuery沒有reduce()函數(另一個在JS 1.6中引入的數組,但在舊瀏覽器中不可用),這很好地實現了這個技巧。

這裏有一種方法來檢查,如果一切都是「不」:

var found = true; 
$.each([firstString, secondString, thirdString], function (i, str) { 
    if (str !== 'no') { 
     found = false; 
    } 
}); 

它可能看起來醜陋,但如果你有更多的字符串來檢查它應該是更短。

如果你想它包裹在一個功能,你可以這樣做:

function allTrue (arr, checkStr) { 
    var found = true; 
    $.each(arr, function (i, str) { 
     if (str !== checkStr) { 
      found = false; 
     } 
    }); 
    return found; 
} 
if (allTrue([firstString, secondString, thirdString], 'no')) { 
    // ... 
} 
+0

已經發布和刪除了相應的答案。這與原始代碼不同。 – 2011-04-23 03:15:00

+0

如果任何變量爲「否」,這將返回true。他希望所有3人都是。 – SuitedSloth 2011-04-23 03:16:12

1

確切地確定你對真或假的評估有點困難,但這可以稍微調整一下,以獲得你要找的東西。

var checkStrings = function() { 
    var no = "no", 
     args = Array.prototype.slice.call(arguments); 

    for (var i = 0, len = args.length; i < len; i++) { 
     if (args[i] !== no) { 
      return false; 
     } 
    } 

    return true; 
}; 

if (checkStrings(firstString, secondString, thirdString)) { 
    // Do stuff here  
} 
0

另一種選擇,使用jQuery.unique:

var uniques = $.unique([firstString, secondString, thirdString]); 
if (uniques.length === 1 && uniques[0] === "no") { 
    // do stuff 
}