на 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 ("тест", myarray) дает true, когда "тест" в массиве.

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

16 ответов


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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

или

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

на 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 когда первый аргумент, переданный в функцию не найдена в массив передается как второй аргумент.


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

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

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

    alert("found");
}

ссылка


вместо jQuery.inArray() вы также можете использовать includes метод для массива int:

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false

проверить официальную должность здесь


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


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


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

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');
    }
}

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

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


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

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

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

например:

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

$.inArray() тут ТО ЖЕ САМОЕ as myarray.indexOf() и возвращает индекс элемента, который вы проверяете на наличие массива. Он просто совместим с более ранними версиями IE до IE9. Лучший выбор, вероятно, использовать myarray.includes() который возвращает логическое значение true / false. См. фрагмент ниже для выходных примеров всех 3 методов.

// Declare the array and define it's values
var myarray = ['Cat', 'Dog', 'Fish'];

// Display the return value of each jQuery function 
// when a radio button is selected
$('input:radio').change( function() {

  // Get the value of the selected radio
  var selectedItem = $('input:radio[name=arrayItems]:checked').val();
  $('.item').text( selectedItem );
  
  // Calculate and display the index of the selected item
  $('#indexVal').text( myarray.indexOf(selectedItem) );
  
  // Calculate and display the $.inArray() value for the selected item
  $('#inArrVal').text( $.inArray(selectedItem, myarray) );
  
  // Calculate and display the .includes value for the selected item
  $('#includeVal').text( myarray.includes(selectedItem) );
});
#results { line-height: 1.8em; }
#resultLabels { width: 14em; display: inline-block; margin-left: 10px; float: left; }
label { margin-right: 1.5em; }
.space { margin-right: 1.5em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Click a radio button to display the output of
&nbsp;<code>$.inArray()</code>
&nbsp;vs. <code>myArray.indexOf()</code>
&nbsp;vs. <code>myarray.includes()</code>
&nbsp;when tested against
&nbsp;<code>myarray = ['Cat', 'Dog', 'Fish'];</code><br><br>

<label><input type="radio" name="arrayItems" value="Cat"> Cat</label>
<label><input type="radio" name="arrayItems" value="Dog"> Dog</label>
<label><input type="radio" name="arrayItems" value="Fish"> Fish</label>  
<label><input type="radio" name="arrayItems" value="N/A"> ← Not in Array</label>
<br><br>

<div id="results">
  <strong>Results:</strong><br>
  <div id="resultLabels">
    myarray.indexOf( "<span class="item">item</span>" )<br>
    $.inArray( "<span class="item">item</span>", myarray )<br>
    myarray.includes( "<span class="item">item</span>" )
  </div>
  <div id="resultOutputs">
    <span class="space">=</span><span id="indexVal"></span><br>
    <span class="space">=</span><span id="inArrVal"></span><br>
    <span class="space">=</span><span id="includeVal"></span>
  </div>
 </div>