jQuery.inArray (), как правильно его использовать?
первый раз, когда я работаю с jQuery.inArray() и он действует как-то странно.
если объект находится в массиве, он вернет 0, но 0 является ложным в 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" является в массиве.
Итак, мой вопрос, почему это сделано таким образом? Мне это очень не нравится. Но там должны быть веские причины, чтобы сделать это.
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, а не если это правда или ложь.
долларов.метод inArray () похож на собственный JavaScript .метод indexOf () в том, что он возвращает -1, когда он не находит соответствия. Если первый элемент в массиве соответствует значению, $.inArray() возвращает 0.
потому что JavaScript рассматривает 0 как свободно равное false (т. е. 0 == false, но 0 != = false), если мы проверяя наличие значения в массиве, мы должны проверить, если оно не равно (или больше) -1.
правильный способ использования
inArray(x, arr)и не используя его вообще, а вместоarr.indexOf(x).официальное стандартное имя также более ясно, что возвращаемое значение является индексом, поэтому, если переданный элемент является первым, вы получите обратно a
0(это ложь в Javascript).(обратите внимание, что
arr.indexOf(x)и не поддерживается в 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)
The
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()
Если мы хотим проверить элемент находится внутри набора элементов, мы можем сделать, например:
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()тут ТОЧНО ТО ЖЕ САМОЕ как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 <code>$.inArray()</code> vs. <code>myArray.indexOf()</code> vs. <code>myarray.includes()</code> when tested against <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>
Comments