2011-11-15 23 views
3

JavaScript是否有一種方便的方法來測試變量是否與許多值中的一個匹配?JavaScript條件 - 如何測試變量是否與值列表中的任何值匹配?

這是我的代碼,

function Start() 
{ 
    if(number==(0||3||6||8||9||11||13||14||15||18||19||22||23||25||27||28||31||34||43||46||47||49||54||58||59||62||63||68||71||74||75)) 
    { 
     FirstFunction(); 
    } 
    if(number==(1||4||5||7||12||16||17||20||21||26||29||32||33||42||45||48||50||51||53||55||56||57||60||61||64||65||67||69||70||73||76)) 
    { 
     SecondFunction(); 
    } 
} 

,你可以看到,我試圖用「或」運算符來檢查,如果數量等於任何列出的。這不幸的是,沒有工作。我知道我只能編碼:

if(number==0||number==3||number==6....) 

我認爲應該有一個替代方案,是嗎?

預先感謝您。

+0

注意基於數組的基礎答案(我也推薦),你不必聲明一個變量併爲它指定一個數組,你可以說'[0,3,6,8] .indexOf(number)! = -1'。 – nnnnnn

+0

明白了,謝謝。現在我不需要添加額外的變量。 – Neten

回答

9

你應該插入陣列中的所有元素,並使用arr.indexOf(element)

它將返回-1,如果元素不存在,你可以使用你的如果邏輯

這是比有很多的if語句

var x = new Array(1,7,15,18); 

if (x.indexOf(31) != -1) 
{ 
    // Add your logic here 
} 
+0

原來,indexOf在Unity3D的jS中不存在,所以我將不得不找到一種方法來檢查數組的索引。我會盡管,感謝您及時的答覆。 – Neten

3

你可以寫這樣的事情,這看起來有點更好的更好:

此陣的原型功能可以讓你檢查,如果在一個JS數組存在一個元素:

Array.prototype.exists = function (x) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] == x) return true; 
    } 
    return false; 
} 

然後:

function Start() 
{ 
    var values1 =[0,3,6,8,9,11,13,14,15,18,19,22,23,25,27,28,31,34,43,46,47,49,54,58,59,62,63,68,71,74,75]; 
    var values2 = [1,4,5,7,12,16,17,20,21,26,29,32,33,42,45,48,50,51,53,55,56,57,60,61,64,65,67,69,70,73,76]; 

    if(values1.exists(number)) 
    { 
     FirstFunction(); 
    } else if (values2.exists(number)) 
    { 
     SecondFunction(); 
    } 
} 
+1

更新數組原型恕我直言,不是一個好主意。該代碼不是未來證明 –

0

已經提到的陣列技術都不​​錯,例如,[0, 3, 6, 8].indexOf(number) != -1,但要注意並不是所有的瀏覽器都支持數組上的.indexOf()(比較老的IE)。如果你看看MDN page on .indexOf(),你會看到他們已經提供了一個.indexOf()的實現,你可以添加到Array.prototype如果它不存在。

但這裏有一個非數組方法將在舊的瀏覽器工作,至少可以追溯到IE6,而無需添加自己的功能或修改任何內置對象的原型:

if (/^(0|3|6|8|9|11)$/.test(number)) { 
    // matched, so do something 
} 

正則表達式.text()方法期待一個字符串,但如果你給它一個數字,它會應付。

我可能仍然會推薦數組方法,但它不能傷害有另一種選擇。

相關問題