2009-11-25 118 views
3

我在這裏搜索了很多問題,但沒有找到一個我認爲適合我的賬單的,所以如果你知道一個請鏈接到它。Javascript正在檢查數組是否存在特定的數字

我有一個數組,我想要搜索一個特定的數字,如果這個數字是在數組中,然後我想採取一個行動,如果不是,那麼另一個行動。

我有這樣的事情

var Array = ["1","8","17","14","11","20","2","6"]; 

for(x=0;x<=Array.length;x++) 
{ 
    if(Array[x]==8) 
     then change picture.src to srcpicture1 
    else 
     then change picture.src to srcpicture2 
} 

但這將運行陣列的lenght並最終檢查數組的最後一個元素,並自最後一個元素是不是8,然後它會改變圖片圖片2。

現在我可以看到爲什麼發生這種情況,我只是沒有任何想法如何去檢查數組是否包含特定的數字。

在此先感謝。

+0

我建議你不要使用Array作爲變量名。即使它有效(我不確定),它可能會導致問題。 – 2009-11-25 09:50:05

+0

我知道,我實際上沒有,我忘了寫myArray – 2009-11-25 09:54:36

回答

8

你可以做的是自己編寫一個函數來檢查元素是否屬於一個數組:

function inArray(array, value) { 
    for (var i = 0; i < array.length; i++) { 
     if (array[i] == value) return true; 
    } 
    return false; 
} 

而只是做:

var arr = ["1","8","17","14","11","20","2","6"]; 
if (inArray(arr, 8)) { 
    // change picture.src to srcpicture1 
} else { 
    // change picture.src to srcpicture2 
} 

這是一個對我很更具可讀性。


對於加分,你可以將功能添加到陣列中的原型,像這樣:

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

然後召喚就會

if (arr.has(8)) // ... 

進一步推動這一點,你可以檢查對於數組上的indexOf()方法並使用它 - 如果不是 - 用上面的代碼替換它。


P.S.儘量不要使用Array作爲變量名稱,因爲它是爲實際數組類型保留的。

+0

謝謝埃米爾。這聽起來像一個好主意,即時嘗試,如果現在 – 2009-11-25 09:52:40

+7

應該檢測indexOf方法,並使用它,如果它可用... – James 2009-11-25 09:55:47

+2

我可以說 - 不要修改buidl在對象的原型?只有當你必須... 關於你的問題 - 這裏有一個很好的,輕的(!)庫,名爲underscore.js。 50個有用的方法來處理數組等。試試吧。你可以很好的與AND一起學習;) http://documentcloud.github.com/underscore/ – NilColor 2009-11-25 09:58:31

3

爲什麼不只是你中止循環,當你找到合適的號碼:

for(x=0;x<=Array.length;x++) 
{ 
    if(Array[x]==8) { 
     //change picture.src to srcpicture1 
     break; 
    } 
} 
+0

這就是我需要的,謝謝! – eshellborn 2013-07-23 21:42:28

0

您可以在陣列的第一排序,然後檢查數組最多隻在其中一個號碼將在該點數組,它是否存在。

0

如果你有獨特的按鍵和更快的檢索是你所關心的很多東西,你可以考慮使用的地圖,而不是的數組(如果存在使用數組的困難情況,那麼它當然不會工作)。如果使用地圖,您只需選中「if(num in arr)」。