У меня есть массив JSON, который похож на это:
['Monkey','Cheetah','Elephant','Lizard','Spider']
У меня также есть ввод текста. Я хочу протестировать, является ли значение входа на 'размытость' также в массиве и если это, делают что-то.
При знании небольшого количества Python я попробовал что-то вроде этого:
var existing_animals = ['Monkey','Cheetah','Elephant','Lizard','Spider']
$('input').blur(function() {
user_animal = $(this).val()
if (user_animal in existing_animals) {
alert('Animal already exists!')
}
});
Так, как новобранец является моей ошибкой?
Оператор in
проверяет, присутствует ли ключ в словаре (объекте). Однако он не работает для массивов. Правильный подход заключается в использовании jQuery.inArray:
if ($.inArray(user_animal, existing) > -1) {
alert('Animal already exists!')
}
Я думаю, вы можете найти свой ответ в этой статье .
Поскольку JSON вычисляет массив, вы должны смотреть на функцию indexOf
. Не знаю, почему вы упомянули здесь python ..
в
предназначен для проверки, включает ли объект атрибут, в то время как вы используете массив.
Если вы хотите использовать свой в
, вы можете:
var existing_animals = {
"Monkey":1,
"Cheetah":1
};
и т. Д., Тогда все будет хорошо, используя в
, однако было бы лучше продолжать использовать свой Array и просто переберите его.
$('input').blur(function() {
user_animal = $(this).val()
for (var i=0;i<existing_animals.length;i++) {
if (existing_animals[i] == user_animal) {
alert("Animal exists");
break;
};
};
});
Пятое издание ECMA представляет метод indexOf
для массивов, поэтому это должно быть так же просто, как и сделать:
if (existing_animals.indexOf(user_animal) != -1) {
alert("Animal exists");
};
Однако IE не поддерживает это; Вы можете реализовать это самостоятельно.
Если вы хотите использовать ключевое слово "in" в JS, это может быть полезно: Сокращение множественных OR в операторе IF в Javascript