JS jQuery - проверить, находится ли значение в массиве
Я больше человек PHP, а не JS - и я думаю, что моя проблема больше связана с синтаксисом.
У меня есть небольшой jQuery для "проверки" и проверки входного значения.
Он работает нормально для отдельных слов, но мне нужен массив.
Я использую inArray()
для jQuery.
var ar = ["value1", "value2", "value3", "value4"]; // ETC...
jQuery(document).ready(function() {
jQuery("form#searchreport").submit(function() {
if (jQuery.inArray(jQuery("input:first"), ar)){
//if (jQuery("input:first").val() == "value11") { // works for single words
jQuery("#divResult").html("<span>VALUE FOUND</span>").show();
jQuery("#contentresults").delay(800).show("slow");
return false;
}
// SINGLE VALUE SPECIAL CASE / Value not allowed
if (jQuery("input:first").val() == "word10") {
jQuery("#divResult").html("YOU CHEAT !").show();
jQuery("#contentresults").delay(800).show("slow");
return false;
}
// Value not Valid
jQuery("#divResult").text("Not valid!").show().fadeOut(1000);
return false;
});
});
теперь - этот if (jQuery.inArray(jQuery("input:first"), ar))
не работает правильно.. каждое значение, которое я положил, будет проверено как OK. (даже пустой)
Мне нужно проверить только значения из массива (ar).
Я также попробовал if (jQuery.inArray(jQuery("input:first"), ar) == 1) // 1,0,-1 tried all
что я делаю неправильно?
Бонусный вопрос: как сделать НЕ в массиве в jQuery??
(эквивалент PHP if (!in_array('1', $a))
), я бы сказал, что это не сработает, и нужно использовать что-то вроде этого: !!~
Ответы
Ответ 1
Вы сравниваете объект jQuery (jQuery('input:first')
) с строками (элементами массива).
Измените код, чтобы сравнить входное значение (которое является строкой) с элементами массива:
if (jQuery.inArray(jQuery("input:first").val(), ar) != -1)
Метод inArray
возвращает -1
, если элемент не найден в массиве, так как ваш бонусный ответ на то, как определить, является ли элемент не в массиве, используйте этот:
if(jQuery.inArray(el,arr) == -1){
// the element is not in the array
};
Ответ 2
Что касается вашего бонусного вопроса, попробуйте if (jQuery.inArray(jQuery("input:first").val(), ar) < 0)
Ответ 3
Альтернативное решение проверки значений
//Duplicate Title Entry
$.each(ar , function (i, val) {
if ( jQuery("input:first").val()== val) alert('VALUE FOUND'+Valuecheck);
});
Ответ 4
Свойство Array.prototype
представляет прототип конструктора Array
и позволяет добавлять новые объекты properties
и methods
ко всем объектам Array
. мы можем создать прототип для этой цели
Array.prototype.has_element = function(element) {
return $.inArray( element, this) !== -1;
};
И затем используйте его так:
var numbers= [1, 2, 3, 4];
numbers.has_element(3) => true
numbers.has_element(10) => false
См. демонстрацию ниже
Array.prototype.has_element = function(element) {
return $.inArray(element, this) !== -1;
};
var numbers = [1, 2, 3, 4];
console.log(numbers.has_element(3));
console.log(numbers.has_element(10));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>