第一次我使用jQuery.inArray(),它的行为有点奇怪。

如果对象在数组中,它将返回0,但0在Javascript中是false。因此,下面将输出:"is NOT in array"

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)当"test"在数组中时返回true。

我的问题是,为什么要这样做?我真的不喜欢这个。但这样做一定有一个很好的理由。


当前回答

答案来自文档的第一段,检查结果是否大于-1,而不是它是真还是假。

$. inarray()方法类似于JavaScript的原生. indexof()方法,当它没有找到匹配时返回-1。如果数组中的第一个元素与value匹配,$. inarray()返回0。 因为JavaScript将0视为松散等于false(即0 == false,但0 !== false),如果我们要检查数组中是否存在value,我们需要检查它是否不等于(或大于)-1。

其他回答

或者,如果您想要稍微花哨一点,您可以使用按位not(~)和逻辑not(!)操作符将inArray函数的结果转换为布尔值。

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

jQuery inArray()方法用于搜索数组中的值,并返回其索引而不是布尔值。如果没有找到值,它将返回-1。

因此,要检查一个值是否存在于数组中,请遵循以下实践:

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

    alert("found");
}

参考

$. inarray()与myarray.indexOf()做完全相同的事情,并返回你正在检查数组中是否存在的项的索引。它只与IE9之前的IE版本兼容。最好的选择可能是使用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>

使用inArray(x, arr)的正确方法是根本不使用它,而是使用arr. indexof (x)。

官方标准名称也更清楚地说明了一个事实,即返回值是一个索引,因此如果传递的元素是第一个,则返回0(在Javascript中是假的)。

(请注意,arr.indexOf(x)直到IE9才在Internet Explorer中得到支持,所以如果你需要支持IE8或更早的版本,这将不起作用,jQuery函数是更好的选择。)

inArray返回数组中元素的索引,而不是指示该元素是否存在于数组中的布尔值。如果未找到该元素,则返回-1。

因此,要检查数组中是否有项,使用:

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