A primeira vez que trabalho jQuery.inArray()
e ela age meio estranha.
Se o objeto estiver na matriz, ele retornará 0, mas 0 é falso em Javascript. Portanto, o seguinte será exibido: "NÃO está na matriz"
var myarray = [];
myarray.push("test");
if(jQuery.inArray("test", myarray)) {
console.log("is in array");
} else {
console.log("is NOT in array");
}
Vou ter que alterar a instrução if para:
if(jQuery.inArray("test", myarray)==0)
Mas isso torna o código ilegível. Especialmente para alguém que não conhece essa função. Eles esperam que o jQuery.inArray ("test", myarray) seja verdadeiro quando "test" estiver na matriz.
Então, minha pergunta é: por que isso é feito dessa maneira? Eu realmente não gosto disso. Mas deve haver uma boa razão para fazê-lo assim.
fonte
if jQuery.inArray('test', myarray) isn't -1
$.isInArray = function(test,array) { return $.inArray(test, array) !== -1; };
$.isInArray = function(item, array) { return !!~$.inArray(item, array); };
(I iria manter o código críptico como aquele em uma função bem nomeado para manter o embora clara intenção :))if( $.inArray(test, array) > -1) { // do stuff }
$.inArray
retorna o índice do elemento se encontrado ou -1 se não for - não é um valor booleano. Então, o correto éfonte
A resposta vem do primeiro parágrafo da documentação, verifique se os resultados são maiores que -1, não se são verdadeiros ou falsos.
fonte
A maneira correta de usar não
inArray(x, arr)
é usá-lo , e sim usararr.indexOf(x)
.O nome padrão oficial também é mais claro no fato de que o valor retornado é um índice, portanto, se o elemento passado for o primeiro, você receberá um a
0
(que é falso em Javascript).(Observe que o Internet Explorer não
arr.indexOf(x)
é suportado até o IE9 ; portanto, se você precisar dar suporte ao IE8 e versões anteriores, isso não funcionará e a função jQuery é uma alternativa melhor.)fonte
$.inArray
usei no início de algum código eu tenho que corrigir um erro, eu gemo. De qualquer forma, esta deve ser a resposta aceita.Ou, se você quiser ter um pouco de fantasia, pode usar os operadores bit a bit not (~) e Logical not (!) Para converter o resultado da função inArray em um valor booleano.
fonte
Eu costumo usar
ou
fonte
if( $.inArray("test", myarray) > -1 )
O método jQuery inArray () é usado para pesquisar um valor em uma matriz e retornar seu índice, não um valor booleano. E se o valor não foi encontrado, ele retornará -1.
Portanto, para verificar se um valor está presente em uma matriz, siga a prática abaixo:
Referência
fonte
A
inArray
função retorna o índice do objeto fornecido como o primeiro argumento para a função na matriz fornecida como o segundo argumento para a função.Quando
inArray
retorna0
, indica que o primeiro argumento foi encontrado na primeira posição da matriz fornecida.Para usar
inArray
em uma instrução if, use:inArray
retorna-1
quando o primeiro argumento passado para a função não é encontrado na matriz passada como o segundo argumento.fonte
Em vez de usar,
jQuery.inArray()
você também pode usar oincludes
método para a matriz int:confira post oficial aqui
fonte
jQuery.inArray () retorna o índice do item na matriz ou -1 se o item não foi encontrado. Leia mais aqui: jQuery.inArray ()
fonte
Ele retornará o índice do item na matriz. Se não for encontrado, você receberá
-1
fonte
Se quisermos verificar se um elemento está dentro de um conjunto de elementos, podemos fazer, por exemplo:
fonte
Isso é útil para verificar variáveis dinâmicas. Este método é fácil de ler.
fonte
$.inArray()
faz a mesma coisa exata comomyarray.indexOf()
e retorna o índice do item do qual você está verificando a matriz. É apenas compatível com versões anteriores do IE antes do IE9. A melhor opção é provavelmente usar,myarray.includes()
que retorne um valor booleano verdadeiro / falso. Veja o trecho abaixo para obter exemplos de saída dos três métodos.fonte
$.inArray
deve ser o padrão-ouro se você tiver acesso à biblioteca jQuery. Caso contrário, o JavaScript.indexOf
com um polyfill para IE8 deve ser usado. Fique longe desse material moderno como.includes()
.Cara, verifique o doc .
por exemplo:
fonte
Por algum motivo, quando você tenta verificar se há um elemento DOM do jquery, ele não funcionará corretamente. Então, reescrever a função faria o truque:
fonte
fonte
Apenas ninguém usa em
$
vez dejQuery
:fonte
$
vez dejQuery
.