Подтвердить что ты не робот

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))), я бы сказал, что это не сработает, и нужно использовать что-то вроде этого: !!~

4b9b3361

Ответ 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>