jQuery / Método / jQuery.inArray() - Encontrar corretamente um índice de array
jQuery.inArray(value, array, fromIndex) devolve o primeiro índice correspondente ou -1 se não encontrar. Teste presença com index !== -1. Zero significa encontrado no começo; usar o retorno diretamente em um if pode dar a resposta errada.
O retorno é uma posição, não um booleano
A API jQuery.inArray() recebe valor, array e índice inicial opcional nessa ordem. É uma utilidade global chamada $.inArray(...) ou jQuery.inArray(...), não um método da seleção DOM como $(selector).inArray(...).
| Retorno | Significado | Boolean(index) | index !== -1 |
|---|---|---|---|
| 0 | Encontrado na primeira entrada | false | true |
| Inteiro a partir de 1 | Encontrado naquele índice | true | true |
| -1 | Não encontrado no intervalo | true | false |
if (index) e index > 0 ignoram a primeira entrada. JavaScript considera -1 verdadeiro em condições, então apenas negar também não resolve. Compare explicitamente com -1 ou confira se é pelo menos zero.
Exemplo completo variando tipo e início
Salve todo o código em UTF-8 como inarray-demo.html e abra no navegador. É preciso internet para carregar o arquivo oficial do jQuery 4.0.0 pela rede de distribuição de conteúdo, CDN, sem instalar pacotes. Tipos, inícios positivos/negativos, array vazio e comparação foram executados com 3.7.1 e 4.0.0.
O array é [0, "0", "alpha", 0]. Value vem de opções predefinidas sem avaliar expressões de strings. Apenas From index é convertido por Number() em posição inicial.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Search an array with inArray</title>
<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
<style>
body { font: 16px/1.6 sans-serif; max-width: 760px; margin: 24px auto; padding: 16px; }
button, select { font: inherit; margin: 4px; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
</style>
</head>
<body>
<h1>Find an index rather than a boolean</h1>
<p>Array: [0, "0", "alpha", 0]</p>
<label for="value">Value:</label>
<select id="value"><option value="number">0 (number)</option><option value="string">0 (string)</option><option value="alpha">alpha</option><option value="missing">missing</option></select>
<label for="from">From index:</label>
<select id="from"><option>0</option><option>1</option><option>3</option><option>9</option><option>-1</option></select>
<button type="button" id="search">Search</button>
<button type="button" id="reset">Reset</button>
<pre id="result" aria-live="polite"></pre>
<script>
$(function () {
const array = [0, "0", "alpha", 0];
const choices = { number: 0, string: "0", alpha: "alpha", missing: "missing" };
function search() {
const value = choices[$("#value").val()];
const fromIndex = Number($("#from").val());
const index = $.inArray(value, array, fromIndex);
const found = index !== -1;
$("#result").text(`value=${JSON.stringify(value)} (${typeof value})\nindex=${index}\nfound=${found}\nBoolean(index)=${Boolean(index)}`);
}
$("#value, #from").on("change", search);
$("#search").on("click", search);
$("#reset").on("click", function () {
$("#value").val("number");
$("#from").val("0");
search();
});
search();
});
</script>
</body>
</html>
Inicialmente o número zero é encontrado no começo:
value=0 (number)
index=0
found=true
Boolean(index)=false
- 0 (string) retorna índice 1: número 0 e string "0" diferem.
- Volte a 0 (number) e escolha From index 1: retorna 3, pulando o zero numérico anterior.
- 3 também retorna 3 porque inclui a posição inicial.
- 9 excede o comprimento: índice -1 e found false, embora Boolean(index) continue true.
- -1 começa na última posição, índice 3, encontrando zero numérico.
- Com início 0, alpha e missing dão 2 e -1. Reset restaura zero numérico e início zero; Search repete as condições atuais.
Comparação estrita e limites de fromIndex
A comparação é estrita, como ===. "0" não vira número 0 automaticamente e substrings não coincidem. Defina o tipo desejado das entradas, conversões aceitas e tratamento de falhas.
Sem início é usado zero. Um início negativo é calculado do final, mas a busca continua para a frente. Muito antes do array começa em zero; a partir do comprimento devolve -1. O resultado é índice absoluto, não relativo ao início. Duplicatas dão somente a primeira ocorrência a partir daquela posição.
Objetos são comparados por referência, não por propriedades semelhantes. Execute este trecho completo no Console das ferramentas de desenvolvimento para comparar o mesmo objeto, um novo, NaN e alternativas nativas.
const item = { id: 1 };
console.log(`same object=${$.inArray(item, [item])}`);
console.log(`new object=${$.inArray({ id: 1 }, [item])}`);
console.log(`NaN index=${$.inArray(NaN, [NaN])} | includes=${[NaN].includes(NaN)}`);
console.log(`empty=${$.inArray("a", [])}`);
const array = ["a", "b", "a"];
console.log(`start 1=${$.inArray("a", array, 1)} | start -1=${$.inArray("a", array, -1)}`);
console.log(`native index=${array.indexOf("a", 1)} | native found=${array.includes("a", 1)}`);
same object=0
new object=-1
NaN index=-1 | includes=true
empty=-1
start 1=2 | start -1=2
native index=2 | native found=true
Escolher indexOf ou includes e proteger a sequência
Para posições em arrays comuns, use também array.indexOf(value, fromIndex) nativo. Não é preciso adicionar jQuery a um projeto só por uma busca. A chamada é array.indexOf(value), em vez de $.inArray(value, array).
Para apenas presença, array.includes(value, fromIndex) retorna true ou false. As regras não são idênticas: NaN dá -1 com $.inArray() e indexOf(), mas true com includes(). Referências de objetos e distinção número/string continuam importantes.
Verifique -1 antes de usar o resultado para excluir. Passar uma falha diretamente a splice() pode remover a última entrada. Se o resultado diferir, confira tipos, ordem dos argumentos, início, referências e alterações do array original.




