JQuery.inArray(), как правильно использовать его?

В первый раз я работаю с jQuery.inArray(), и он действует странно.

Если объект находится в массиве, он вернет 0, но 0 - false в Javascript. Итак, выводится следующее: "НЕ в массиве"

var myarray = [];
myarray.push("test");

if(jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

Мне нужно будет изменить оператор if:

if(jQuery.inArray("test", myarray)==0)

Но это делает код нечитаемым. Особенно для тех, кто не знает эту функцию. Он будет ожидать, что jQuery.inArray( "test", myarray) дает true, когда "test" находится в массиве.

Итак, мой вопрос: почему это делается так? Мне это очень не нравится. Но для этого должны быть веские причины.

Ответ 1

inArray возвращает индекс элемента в массиве, а не логическое значение, указывающее, существует ли элемент в массиве. Если элемент не найден, возвращается -1.

Итак, чтобы проверить, находится ли элемент в массиве, используйте:

if(jQuery.inArray("test", myarray) !== -1)

Ответ 2

$.inArray возвращает индекс элемента if found или -1, если он не является - не логическим значением. Итак, правильный

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
} 

Ответ 3

Ответ исходит из первого абзаца документации, проверяющего, превышает ли результат более -1, а не true или false.

Метод $.inArray() похож на собственный .indexOf() метод JavaScript, в котором он возвращает -1, когда он не находит совпадения. Если первый элемент внутри массива соответствует значению, $.inArray() возвращает 0.

Поскольку JavaScript обрабатывает 0 как слабо равное false (то есть 0 == false, но 0! == false), если мы проверяем наличие значения внутри массива, нам нужно проверить, не равно ли оно ( или больше) -1.

Ответ 4

Правильный способ использования inArray(x, arr) - не использовать его вообще и вместо этого использовать arr.indexOf(x).

Официальное стандартное имя также более ясно указывает на то, что возвращаемое значение является индексом, таким образом, если переданный элемент является первым, вы вернете a 0 (это ложь в Javascript).

(Обратите внимание, что arr.indexOf(x) не поддерживается в Internet Explorer до IE9, поэтому, если вам нужно поддерживать IE8 и ранее, это не сработает, а функция jQuery - лучшая альтернатива.)

Ответ 5

Или, если вы хотите получить немного фантазии, вы можете использовать операторы bitwise not (~) и logical not (!) для преобразования результата функции inArray в логическое значение.

if(!!~jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

Ответ 6

Функция inArray возвращает индекс объекта, предоставленного в качестве первого аргумента функции в массиве, предоставленном в качестве второго аргумента функции.

Когда inArray возвращает 0, это указывает на то, что первый аргумент был найден в первой позиции поставляемого массива.

Чтобы использовать inArray в выражении if, используйте:

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

inArray возвращает -1, когда первый аргумент, переданный функции, не найден в массиве, переданном как второй аргумент.

Ответ 7

Я обычно использую

if(!(jQuery.inArray("test", myarray) < 0))

или

if(jQuery.inArray("test", myarray) >= 0)

Ответ 8

Метод jQuery inArray() используется для поиска значения в массиве и возврата его индекса не к логическому значению. И если значение не было найдено, itll вернет -1.

Итак, чтобы проверить, присутствует ли значение в массиве, следуйте приведенной ниже практике:

myArray = new Array("php", "tutor");
if( $.inArray("php", myArray) !== -1 ) {

    alert("found");
}

Ссылка

Ответ 9

jQuery.inArray() возвращает индекс элемента в массиве или -1, если элемент не найден. Подробнее здесь: jQuery.inArray()

Ответ 10

Он вернет индекс элемента в массиве. Если он не найден, вы получите -1

Ответ 11

Если мы хотим проверить, что элемент находится внутри набора элементов, мы можем сделать, например:

var checkboxes_checked = $('input[type="checkbox"]:checked');

// Whenever a checkbox or input text is changed
$('input[type="checkbox"], input[type="text"]').change(function() {
    // Checking if the element was an already checked checkbox
    if($.inArray( $(this)[0], checkboxes_checked) !== -1) {
        alert('this checkbox was already checked');
    }
}

Ответ 12

/^(one|two|tree)$/i.test(field) // field = Two; // true
/^(one|two|tree)$/i.test(field) // field = six; // false
/^(раз|два|три)$/ui.test(field) // field = Три; // true

Это полезно для проверки динамических переменных. Этот метод легко читается.

Ответ 13

Просто не используйте $ вместо jQuery:

if ($.inArray(nearest.node.name, array)>=0){
   console.log("is in array");
}else{
   console.log("is not in array");
}

Ответ 14

Человек, проверьте doc.

например:

var arr = [ 4, "Pete", 8, "John" ];
console.log(jQuery.inArray( "John", arr ) == 3);