2009-05-20 56 views
10

我需要一個JavaScript函數,可以在一個字符串數組,如果該字符串數組中返回true ..javascript函數inArray

function inArray(str, arr){ 
    ... 
} 

警告:不能使用任何JavaScript框架。

回答

18

你可以只讓一個數組的原型功能ALA:

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

if (['test'].hasValue('test')) alert('Yay!'); 

注意使用「===」而不是「==」你可以改變,如果你需要更少的具體的匹配。否則... [3] .hasValue('3')將返回false。

+3

包括在該變種的(...)索引邏輯誤導,因爲它表明var的範圍只在for循環內(對於多語言程序員)。但是,範圍是整個功能。另外,在變量範圍的最高點聲明變量通常被認爲是一種很好的做法,也是避免範圍衝突的好方法。 – Kato 2011-11-08 18:22:36

1

看看this related question。以下是最高票數答案的代碼。

function contains(a, obj) { 
    var i = a.length; 
    while (i--) { 
    if (a[i] === obj) { 
     return true; 
    } 
    } 
    return false; 
} 
8

這樣的事情?

function in_array(needle, haystack) 
{ 
    for(var key in haystack) 
    { 
     if(needle === haystack[key]) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+5

我可能不應該用於(鍵入數組)。如果某人已經擴展了Array對象,那麼它將迭代新的方法/屬性(不僅僅是數組值)。 – Matthew 2009-05-21 00:11:37

+0

-1更好的方法是使用Array.prototype.indexOf(),使用庫(如下劃線,jQurey等)進行回退,最後如果沒有需要或不可用的庫,則使用上述解決方案,除非檢查Object.prototype.hasOwnProperty()。 – martin 2013-12-08 22:47:53

-1

小心:

的indexOf()使用部分數據。如果你有「12」,「1」

的indexOf(「1」)將讓你的「12」不是「1」