有什么不对的:
var zipCodes =(['90001','90002','90003']);
测试是否存在数组中的值zipCodes
if('90001' in zipCodes) {
alert('True');
};
有什么不对的:
var zipCodes =(['90001','90002','90003']);
测试是否存在数组中的值zipCodes
if('90001' in zipCodes) {
alert('True');
};
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;
};
}
明白了。那么,你将如何处理匹配JS数组的值? – djreed
@djreed:我用'.indexOf()'的解决方案更新了我的答案。 – user113716
@ down-voter:解释? – user113716
你需要的东西是这样的:
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
....
使用对象来代替。如果这就是你想要处理的数组,那么一个对象是一个更有效的方法来执行查找列表。这里
var zipCodes = {"90001": true, "90002": true, "90003": true};
if ('90001' in zipCodes) {
alert('True');
}
的jsfiddle看到它的工作:http://jsfiddle.net/jfriend00/ZNGTq/
因为in
检查对象的属性。检查将“in object”转换为“in array”:Testing for a Value in JavaScript Array
如果要检查数组是否包含给定值,可以使用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
Array对象上的'indexOf'方法是非常新的,所以他可能无法使用它。如果一个数组是必须的,那么'zipCodes.join()。indexOf('90002')'会起作用。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf以获取有关“indexOf”可用性的信息。 –
见http://stackoverflow.com/questions/237104/javascript-array-containsobj –
如果这就是你的代码,然后不要使用数组,因为它是工作的错误工具。使用一个对象,然后你可以使用“in”。看到我的帖子下面。 – jfriend00