Выясните, есть ли переменная в массиве?

У меня есть переменная:

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 при ее запуске:

TypeError: недопустимый операнд 'instanceof' countryList

Ответ 1

jQuery имеет функцию утилиты, чтобы определить, существует ли элемент в массиве или нет.

$.inArray(value, array)

Он возвращает индекс значения в array и -1 если значение отсутствует в массиве. поэтому ваш код может быть таким

if( $.inArray(code, countryList) != -1){
     alert('value is Array!');
} else {
    alert('Not an array');
}

Ответ 2

Вам нужно использовать Array.indexOf:

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

Пожалуйста, не нужно, чтобы он не поддерживался и перед IE8 (и, возможно, с другими устаревшими браузерами). Узнайте больше об этом здесь.

Ответ 3

Кажется, вы ищете функцию Array.indexOf.

Ответ 4

В jquery вы можете использовать

jQuery.inArray() -Search для заданного значения внутри массива и вернуть его индекс (или -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

Ответ 5

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() и retuns -1, если он не находит элемент, который вы ищете. Поэтому вы можете использовать его следующим образом:

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

Ответ 6

Для чистого решения JavaScript вы можете просто пересечь массив.

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

    for(; i < len; i++ ) {
        if( r[i] === val ) {
            return i;
        }
     }
     return -1;
}

Ответ 7

использование jQuery

Вы можете использовать $.inArray()

$.inArray(value, array)

вернуть индекс элемента или -1, если он не найден