2011-07-10 64 views
2

可能重复:
Javascript - array.contains(obj)在JavaScript数组查找元素

有什么不对的:

var zipCodes =(['90001','90002','90003']); 

测试是否存在数组中的值zipCodes

if('90001' in zipCodes) { 
    alert('True'); 
}; 
+1

见http://stackoverflow.com/questions/237104/javascript-array-containsobj –

+2

如果这就是你的代码,然后不要使用数组,因为它是工作的错误工具。使用一个对象,然后你可以使用“in”。看到我的帖子下面。 – jfriend00

回答

11

in运算符查看属性名称,而不是值。

因为它是一个数组,所以属性名称将是数组的索引。

如果您只支持现代环境,则可以使用Array.prototype.indexOf()

if(zipCodes.indexOf('90001') > -1) { 

如果您需要支持没有.indexOf()环境下,可以实现the MDN fix

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 

     if (this === void 0 || this === null) throw new TypeError(); 

     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) return -1; 

     var n = 0; 
     if (arguments.length > 0) { 
      n = Number(arguments[1]); 
      if (n !== n) // shortcut for verifying if it's NaN 
      n = 0; 
      else if (n !== 0 && n !== (1/0) && n !== -(1/0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
     } 

     if (n >= len) return -1; 

     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 

     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) return k; 
     } 
     return -1; 
    }; 
} 
+0

明白了。那么,你将如何处理匹配JS数组的值? – djreed

+0

@djreed:我用'.indexOf()'的解决方案更新了我的答案。 – user113716

+1

@ down-voter:解释? – user113716

2

你需要的东西是这样的:

var zipCodes =(['90001','90002','90003']); 

if (zipCodes.has('90001')) { 
    .... 
} 

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

更多信息请参阅本:

http://snook.ca/archives/javascript/testing_for_a_v

....

+0

感谢downvote和没有评论。 – PaulM

+0

对于这种类型的测试,数组不是最好的数据结构,除非有其他原因是数组。最好使用一个对象。 – jfriend00

+2

标题说:在JavaScript数组中找到元素..你错过了“数组”部分?我只是回答这个问题。在OP中发表关于数据结构的评论,而不是在这里!我也在想,如果那些低估了我的人,也实际上已经阅读了伴随的链接。 – PaulM

3

使用对象来代替。如果这就是你想要处理的数组,那么一个对象是一个更有效的方法来执行查找列表。这里

var zipCodes = {"90001": true, "90002": true, "90003": true}; 

if ('90001' in zipCodes) { 
    alert('True'); 
} 

的jsfiddle看到它的工作:http://jsfiddle.net/jfriend00/ZNGTq/

4

如果要检查数组是否包含给定值,可以使用indexOf方法检查项目的位置。如果数组中没有找到该项目,则返回-1:

var zipCodes =(['90001','90002','90003']); 
zipCodes.indexOf('90001') // 0 
zipCodes.indexOf('90002') // 1 
zipCodes.indexOf('90003') // 2 
zipCodes.indexOf('90004') // -1 

if(zipCodes.indexOf('90001') != -1) { 
    alert('True'); 
}; 

多见于http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm

+0

Array对象上的'indexOf'方法是非常新的,所以他可能无法使用它。如果一个数组是必须的,那么'zipCodes.join()。indexOf('90002')'会起作用。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf以获取有关“indexOf”可用性的信息。 –