Выясните, есть ли переменная в массиве?
У меня есть переменная:
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, если он не найден