在Javascript数组中查找元素

时间:2011-07-10 00:21:38

标签: javascript arrays

  

可能重复:
  Javascript - array.contains(obj)

这有什么问题:

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

测试数组zipCodes

中是否存在该值
if('90001' in zipCodes) {
  alert('True');
};

5 个答案:

答案 0 :(得分: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;
    };
}

答案 1 :(得分: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

了解详情

答案 2 :(得分:3)

改为使用对象。如果您正在尝试使用数组,那么对象是一种更有效的查找列表方式。

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

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

jsfiddle在这里看到它的工作原理:http://jsfiddle.net/jfriend00/ZNGTq/

答案 3 :(得分: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

...

答案 4 :(得分:0)

因为in检查对象的属性。检查一下,将“in object”转换为“in array”:Testing for a Value in JavaScript Array