Isso funcionará para testar se um valor na posição "índice" existe ou não ou se existe uma maneira melhor:
if(arrayName[index]==""){
// do stuff
}
javascript
arrays
Ankur
fonte
fonte
Respostas:
Conceitualmente, matrizes em JavaScript contêm
array.length
elementos, começando comarray[0]
atéarray[array.length - 1]
. Um elemento da matriz com índicei
é definido para fazer parte da matriz, sei
estiver entre0
earray.length - 1
inclusive. Se eu não estiver nesse intervalo, não está no array.Portanto, por conceito, as matrizes são lineares, começando com zero e indo ao máximo, sem nenhum mecanismo para ter "lacunas" dentro desse intervalo em que não existem entradas. Para descobrir se existe um valor em um determinado índice de posição (onde o índice é 0 ou um número inteiro positivo), você literalmente apenas usa
Agora, os mecanismos JavaScript quase certamente não alocam o espaço da matriz de maneira linear e contígua assim, pois não faria muito sentido em uma linguagem dinâmica e seria ineficiente para determinado código. Provavelmente são tabelas de hash ou alguma mistura híbrida de estratégias, e intervalos indefinidos da matriz provavelmente não recebem sua própria memória. No entanto, JavaScript, a linguagem deseja apresentar matrizes de
array.length
n como tendo n membros e elas são nomeadas de 0 a n-1 , e qualquer coisa nesse intervalo faz parte da matriz.O que você provavelmente deseja, no entanto, é saber se um valor em uma matriz é realmente algo definido - ou seja, não é
undefined
. Talvez você queira saber se está definido e nãonull
. É possível adicionar membros a uma matriz sem nunca definir seu valor: por exemplo, se você adicionar valores de matriz aumentando aarray.length
propriedade, quaisquer novos valores serãoundefined
.Para determinar se um determinado valor é significativo ou foi definido. Ou seja, não
undefined
, ounull
:ou
Curiosamente, por causa das regras de comparação do JavaScript, meu último exemplo pode ser otimizado para isso:
fonte
length
propriedade. Nesse caso, os dois exemplos seguintes são mais apropriados.foo !== 'undefined' && foo !== null
por apenasfoo != null
0
atéarray.length - 1
. Nem todos esses valores serão definidos . Se você usar a palavra-chave delete em um membro da matriz, ele voltará a ser indefinido, assim como se você estender uma matriz incrementando seu parâmetro array.length, os novos valores começarão como indefinidos. Na realidade, as implementações de Javascript provavelmente otimizarão o armazenamento da matriz e alguns ou todos os valores indefinidos podem não ocupar memória.new Array(1)[0] === undefined
mas o valor está vazio.[undefined][0] === undefined
mas o valor está definido; a matriz tem um valor. A única perfeita resposta está usandoin
ouhasOwnProperty()
-idx in array
ouarray.hasOwnProperty(idx)
--per esta resposta: stackoverflow.com/a/39171620/3120446Não podemos simplesmente fazer isso:
fonte
if(arrayName.length) {...
alguma diferença?if(arrayName.length) {...
falhanull
[undefined, undefined]
o qual é uma matriz com comprimento = 2.Usar apenas
.length
não é seguro e causará um erro em alguns navegadores. Aqui está uma solução melhor:ou, podemos usar:
fonte
fonte
fonte
x == null
só será verdadeiro para nulo ou indefinido, nada mais. Da mesma forma,x != null
será verdadeiro para qualquer coisa que não seja nula ou indefinida. A menos que você precise procurar indefinidamente, apenas incline-se para a bondade implícita da conversão.Abordagem curta e universal
Se você deseja verificar qualquer matriz se ela tiver valores falsos (como cadeias de caracteres falsas, indefinidas, nulas ou vazias), basta usar todos os métodos () como este:
Por exemplo:
Se você precisar obter um primeiro índice de valor falso, poderá fazer o seguinte:
Se você só precisa verificar um valor falso de uma matriz para um determinado índice, basta fazer o seguinte:
fonte
Se você quer dizer com 'Nulo' -> Seus elementos são nulos ou iguais a '', neste caso: Verifique se a matriz está vazia depois de filtrar todos os elementos 'nulos'
Obviamente, adicione o método Clean antes:
fonte
Eu recomendaria criar uma função como esta:
Você poderia chamar assim:
Forçar o desenvolvedor a aderir à interface isEmptyEl detectará erros de entrada, como variáveis indefinidas arrayName ou indexVal.
Geralmente, é uma boa prática programar defensivamente ao programar em Javascript.
Você receberia um erro como este se arrayName não estivesse definido:
Resultados semelhantes para um indexVal indefinido.
Você receberá um erro se os valores da matriz ou do índice não existirem.
Para entrada válida, você só obterá um valor verdadeiro se arrayName [indexVal] for um dos seguintes:
fonte
Depende do que você quer dizer com "vazio".
Quando você tenta obter o valor de uma propriedade em um objeto que não possui nenhuma propriedade com esse nome, você obtém o valor
undefined
.É o que acontece com matrizes esparsas: nem todos os índices entre
0
earray.length-1
existem.Então você pode verificar se
array[index] === undefined
.No entanto, a propriedade
index
poderia existir com umundefined
valor. Se você deseja filtrar esse caso, pode usar oin
operador ouhasOwnProperty
, conforme descrito em Como verifico se um objeto tem uma propriedade em JavaScript?Se você quiser considerar uma propriedade existente com um valor
undefined
ounull
inexistente, poderá usar a comparação livrearray[index] == undefined
ouarray[index] == null
.Se você souber que a matriz não é esparsa, você pode comparar
index
comarray.length
. Mas, para estar seguro, convém garantir queindex
realmente seja um índice de matriz, consulte Verificar se o nome da propriedade é índice de matrizfonte
OK, vamos primeiro ver o que aconteceria se um valor de matriz não existisse em JavaScript, portanto, se tivermos uma matriz como a seguir:
e agora verificamos se 6 existe no índice 5 ou não:
e nós temos
undefined
...Então isso é basicamente a resposta, a melhor maneira de verificar se não está definido, algo assim:
É melhor NÃO fazer isso neste caso:
Porque imagine que temos essa matriz:
e fazemos:
Então, como você vê, mesmo o 0 está lá, ele não é reconhecido, existem poucas outras coisas que podem fazer o mesmo e torná-lo um buggy de aplicativo; portanto, tenha cuidado, listo todos eles:
undefined
''
fonte
Gostaria de salientar algo que alguns parecem ter perdido: ou seja, é possível ter uma posição de matriz "vazia" no meio da matriz. Considere o seguinte:
A maneira natural de verificar seria então ver se o membro da matriz é indefinido. Não tenho certeza se existem outras maneiras.
fonte
tente isso se o array [index] for nulo
fonte
Com o Lodash, você pode fazer:
if(_.has(req,'documents'))
é verificar se nosso objeto de solicitação tem uma propriedade nomeadadocuments
e se possui esse suporte, o próximoif (req.documents.length)
é validar se não é uma matriz vazia, para que outras coisasforEach
possam ser prosseguidas.fonte
Para verificar se ele nunca foi definido ou se foi excluído:
também funciona com matrizes associativas e matrizes nas quais você excluiu algum índice
Para verificar se ele nunca foi definido, foi excluído OU é um valor vazio nulo ou lógico (NaN, sequência vazia, false):
fonte
Corri para esse problema usando tabelas de dados laravel. Eu estava armazenando um valor JSON chamado
properties
em um log de atividades e queria mostrar um botão com base nesse valor vazio ou não.Bem, as tabelas de dados estavam interpretando isso como uma matriz, se estivesse vazia, e um objeto, se não estivesse, portanto, a seguinte solução funcionou para mim:
Um objeto não possui uma propriedade length.
fonte
Penso que esta decisão é apropriada para indivíduos que preferem a programação funcional declarativa ao invés da OOP imperativa ou do procedimento. Se sua pergunta for " Existe algum valor interno? (Um valor verdadeiro ou falso)", você pode usar o
.some
método para validar os valores internos.function isEmpty(arr) { ... }
.[].length
resultando em0
o que é perigoso em alguns casos.[].length > 0
ditado "Seu comprimento é maior que zero?"Exemplos avançados:
fonte
Você pode usar a biblioteca Loadsh para fazer isso de forma mais eficiente, como:
se você tiver uma matriz chamada "animais de estimação", por exemplo:
Para verificar todos os valores da matriz para valores nulos ou indefinidos:
Veja mais exemplos em http://underscorejs.org/
fonte
fn(){}
é um erro de sintaxe e não está claro como isso ajuda a verificar se um item da matriz existe em um determinado índice ou não.