Digamos que eu tenho isso:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
Há mais elementos de matriz, mas esses são apenas alguns para fins de legibilidade. Enfim, eu poderia fazer um loop "for", mas ele faria 500 loops toda vez que você clicar no mapa ... existe alguma outra maneira de ver se uma determinada string está em uma matriz?
javascript
teste
fonte
fonte
if(!!~blockedTile.indexOf('118))
este método sempre retornará verdadeiro se o resultado> -1 e falso se o resultado === -1indexOf()
também pode ser aplicado em matrizes literais, por exemploif (-1 == [84, 116].indexOf(event.keyCode))
. Testado no Chrome 37.0.2062.122.indexOf(…) >= 0
. não faz diferença e eu esquecer de onde eu peguei como um hábitoComo mencionado anteriormente, se o seu navegador suportar
indexOf()
, ótimo! Caso contrário, é necessário filtrá-lo ou contar com um cinto de utilidades como lodash / sublinhado .Só queria adicionar esta adição mais recente do ES2016 (para manter esta pergunta atualizada):
Array.prototype.includes ()
fonte
fonte
Use Underscore.js
É compatível com vários navegadores e pode executar uma pesquisa binária se seus dados forem classificados.
_.índice de
Exemplo
fonte
Alguns navegadores suportam
Array.indexOf()
.Caso contrário, você pode aumentar o
Array
objeto através de seu protótipo da seguinte maneira ...Fonte .
fonte
Basta usar para o seu gosto:
fonte
fonte
A melhor maneira de fazer isso em 2019 é usando
.includes()
O primeiro parâmetro é o que você está procurando. O segundo parâmetro é a posição do índice nessa matriz na qual iniciar a pesquisa.
Se você precisa ser inteligente aqui - há muitas respostas herdadas.
fonte
includes
solução é duplicado na Kutyel (2016), Сергей Савельев (2017) e Krunal Limbad (2018) respostas com exemplos igualmente detalhados e referências ...Já respondeu acima, mas queria compartilhar.
tem alguma referência aqui . eles também têm Polyfill para acima.
fonte
Array.includes()
é introduzido no ES7 (ECMAScript 2017) e não funcionará com navegadores antigos. developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…Dependendo da versão do JavaScript disponível, você pode usar
indexOf
:Ou
some
:Mas, se você estiver fazendo esse tipo de existência, verifique muito, seria melhor usar um Objeto para armazenar suas seqüências de caracteres (ou talvez um objeto e a Matriz, dependendo do que está fazendo com seus dados).
fonte
Eu usaria uma estrutura de dados diferente, pois o array parece não ser a melhor solução.
Em vez de matriz, use um objeto como uma tabela de hash, assim:
(publicado também em jsbin )
Saída do console:
Essa é uma solução direta. Se você prefere uma abordagem orientada a objetos, pesquise no Google "js hashtable" .
fonte
IMHO mais compatível com navegadores antigos
Ao transformar uma cópia de matriz em uma sequência CSV, você pode testar a sequência em navegadores mais antigos.
fonte
['Lemon Pie'].inArray('Lemon')
, retornaráTrue
. Você pode enrolar a agulha,
para contorná-la ou usar a correspondência de expressões regulares para fazer o mesmo, mas a junção seria preferível usando algo mais obscuro do que,
por razões falso-positivas semelhantes (por|
exemplo). Depende do conjunto de dadosPor que você não usa o Array.filter?
Basta copiar isso no seu código e aqui está:
fonte
no exemplo de array, é o mesmo no php (in_array)
fonte
fonte
includes
. Como essa resposta fornece valores adicionais em comparação a eles?Você pode tentar o código abaixo. Verifique http://api.jquery.com/jquery.grep/
verifique arr.length se for maior que 0 significa que a string está presente; caso contrário, não está presente.
fonte
Eu acho que a maneira mais simples é que:
fonte