2009-05-20 58 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”