21

我有一个变量:

var code = "de";

我有一个数组:

var countryList = ["de","fr","it","es"];

有人可以帮助我,因为我需要检查变量是否在 countryList 数组中 - 我的尝试在这里:

    if (code instanceof countryList) {
        alert('value is Array!');
    } 

    else {
        alert('Not an array');
    }

但是运行时我在 console.log 中收到以下错误:

类型错误:无效的“instanceof”操作数国家列表

4

7 回答 7

33

您需要使用Array.indexOf

if (countryList.indexOf(code) >= 0) {
   // do stuff here
}

请注意它在 IE8 和之前的版本中不受支持(可能还有其他旧版浏览器)。在此处了解更多信息。

于 2012-11-22T09:39:38.103 回答
23

jQuery 有一个实用函数来查找一个元素是否存在于数组中

$.inArray(value, array)

它返回值的索引,array如果-1值不存在于数组中。所以你的代码可以是这样的

if( $.inArray(code, countryList) != -1){
     alert('value is Array!');
} else {
    alert('Not an array');
}
于 2012-11-22T09:44:29.097 回答
5

您似乎正在寻找Array.indexOf函数。

于 2012-11-22T09:39:47.420 回答
4

instanceof用于检查对象是否属于某种类型(这是一个完全不同的主题)。因此,您应该在数组中查找,而不是您编写的代码。您可以像这样检查每个元素:

var found = false;
for( var i = 0; i < countryList.length; i++ ) {
  if ( countryList[i] === code ) {
    found = true;
    break;
  }
}

if ( found ) {
  //the country code is not in the array
  ...
} else {
  //the country code exists in the array
  ...
}

或者您可以使用更简单的indexOf()函数使用方法。每个数组都有一个indexOf()函数循环一个元素并返回它在数组中的索引。如果找不到元素,则返回-1。因此,您检查 的输出indexOf()以查看它是否在数组中找到与您的字符串匹配的任何内容:

if (countryList.indexOf(code) === -1) {
  //the country code is not in the array
  ...
} else {
  //the country code exists in the array
  ...
}

我会使用第二种算法,因为它更简单。但是第一个算法也很好,因为它更具可读性。两者的收入相同,但第二个性能更好,时间更短。但是,旧浏览器(IE<9)不支持它。

如果您使用的是 JQuery 库,则可以使用inArray()适用于所有浏览器的功能。indexOf()如果它没有找到您要查找的元素,则它与返回 -1相同。所以你可以像这样使用它:

if ( $.inArray( code, countryList ) === -1) {
  //the country code is not in the array
  ...
} else {
  //the country code exists in the array
  ...
}
于 2012-11-22T09:46:51.137 回答
3

在 jquery 中,您可以使用

jQuery.inArray() - 在数组中搜索指定值并返回其索引(如果未找到则返回 -1)。

if ($.inArray('de', countryList ) !== -1) 
{
}

对于 javascript 解决方案检查现有 如何检查数组是否包含 JavaScript 中的对象?

Array.prototype.contains = function(k) {
    for(p in this)
        if(this[p] === k)
            return true;
    return false;
}
for example:

var list = ["one","two"];

list.contains("one") // returns true
于 2012-11-22T09:40:19.800 回答
2

对于纯 JavaScript 解决方案,您可以只遍历数组。

function contains( r, val ) {
    var i = 0, len = r.length;

    for(; i < len; i++ ) {
        if( r[i] === val ) {
            return i;
        }
     }
     return -1;
}
于 2012-11-22T09:47:21.700 回答
0

使用jQuery

您可以使用$.inArray()

$.inArray(value, array)

如果未找到,则返回项目索引或 -1

于 2012-11-22T09:41:19.270 回答