¿Funcionará para probar si un valor en la posición "índice" existe o no, o hay una mejor manera?
if(arrayName[index]==""){
// do stuff
}
javascript
arrays
Ankur
fuente
fuente
Respuestas:
Conceptualmente, las matrices en JavaScript contienen
array.length
elementos, comenzandoarray[0]
por hastaarray[array.length - 1]
. Un elemento de matriz con índicei
se define como parte de la matriz sii
está entre0
earray.length - 1
incluye. Si no estoy en este rango, no está en la matriz.Entonces, por concepto, las matrices son lineales, comenzando con cero y llegando a un máximo, sin ningún mecanismo para tener "espacios" dentro de ese rango donde no existen entradas. Para averiguar si existe un valor en un índice de posición dado (donde el índice es 0 o un entero positivo), literalmente solo usa
Ahora, bajo el capó, los motores de JavaScript casi seguramente no asignarán espacio de matriz de forma lineal y contigua de esta manera, ya que no tendría mucho sentido en un lenguaje dinámico y sería ineficiente para cierto código. Probablemente sean tablas hash o alguna combinación híbrida de estrategias, y los rangos indefinidos de la matriz probablemente no tengan asignada su propia memoria. Sin embargo, JavaScript, el lenguaje, quiere presentar matrices de
array.length
n que tengan n miembros y se denominen 0 a n - 1 , y cualquier cosa en este rango es parte de la matriz.Sin embargo, lo que probablemente desee es saber si un valor en una matriz es realmente algo definido , es decir, no lo es
undefined
. Tal vez incluso quieras saber si está definido y nonull
. Es posible agregar miembros a una matriz sin establecer su valor: por ejemplo, si agrega valores de matriz al aumentar laarray.length
propiedad, se mostrarán los valores nuevosundefined
.Para determinar si un valor dado es algo significativo o si se ha definido. Es decir, no
undefined
, onull
:o
Curiosamente, debido a las reglas de comparación de JavaScript, mi último ejemplo puede optimizarse para esto:
fuente
length
propiedad, en cuyo caso los dos ejemplos posteriores son más apropiados.foo !== 'undefined' && foo !== null
con solofoo != null
0
hastaarray.length - 1
. Sin embargo, no todos estos valores serán valores definidos . Si usa la palabra clave delete en un miembro de la matriz, volverá a definir ese miembro como indefinido, al igual que si extiende una matriz incrementando su parámetro array.length, los nuevos valores comenzarán como indefinidos. En realidad, las implementaciones de Javascript probablemente optimizarán el almacenamiento de la matriz y algunos o todos los valores indefinidos pueden no ocupar memoria.new Array(1)[0] === undefined
Pero el valor está vacío.[undefined][0] === undefined
pero el valor está establecido; La matriz tiene un valor. La única perfecta respuesta está utilizandoin
ohasOwnProperty()
-idx in array
oarray.hasOwnProperty(idx)
--per esta respuesta: stackoverflow.com/a/39171620/3120446¿No podemos hacer esto?
fuente
if(arrayName.length) {...
alguna diferencia?if(arrayName.length) {...
fallanull
[undefined, undefined]
que es una matriz con longitud = 2.Usar solo
.length
no es seguro y provocará un error en algunos navegadores. Aquí hay una mejor solución:o podemos usar:
fuente
fuente
fuente
x == null
solo será cierto para nulo o indefinido, nada más. Del mismo modo,x != null
será cierto para cualquier cosa que no sea nula o indefinida. A menos que necesite buscar específicamente indefinido, simplemente inclínese hacia la bondad de conversión implícita.Enfoque corto y universal
Si desea verificar cualquier matriz si tiene valores falsos (como cadenas falsas, indefinidas, nulas o vacías), puede usar cada método () de esta manera:
Por ejemplo:
Si necesita obtener un primer índice de valor falso, puede hacerlo así:
Si solo necesita verificar un valor falso de una matriz para un índice dado, puede hacerlo así:
fuente
Si quiere decir con 'Nulo' -> Sus elementos son nulos o iguales a '', en este caso: Verifique si la matriz está vacía después de filtrar todos los elementos 'nulos'
Por supuesto, agregue el método Clean antes:
fuente
Recomendaría crear una función como esta:
Podrías llamarlo así:
Obligar al desarrollador a adherirse a la interfaz isEmptyEl detectará errores de entrada como un arrayName indefinido o variables indexVal.
(Generalmente es una buena práctica programar a la defensiva cuando se programa en Javascript).
Se generaría un error como este si no se definiera arrayName:
Resultados similares para un indexVal indefinido.
Obtiene un error si la matriz o los valores de índice no existen.
Para una entrada válida, solo obtendrá un verdadero si arrayName [indexVal] es cualquiera de los siguientes:
fuente
Depende de lo que quieras decir con "vacío".
Cuando intente obtener el valor de una propiedad en un objeto que no tiene propiedades con ese nombre, obtendrá el valor
undefined
.Eso es lo que sucede con matrices dispersas: no todos los índices existen
0
yarray.length-1
existen.Para que puedas comprobar si
array[index] === undefined
.Sin embargo, la propiedad
index
podría existir con unundefined
valor. Si desea filtrar este caso, puede usar elin
operador ohasOwnProperty
, como se describe en ¿Cómo verifico si un objeto tiene una propiedad en JavaScript?Si desea considerar que una propiedad existente con un valor
undefined
onull
no existe, puede usar la comparación sueltaarray[index] == undefined
oarray[index] == null
.Si sabe que la matriz no es escasa, puede comparar
index
conarray.length
. Pero para estar seguro, es posible que desee asegurarse de queindex
realmente sea un índice de matriz, consulte Verificar si el nombre de la propiedad es un índice de matrizfuente
OK, primero veamos qué sucedería si no existiera un valor de matriz en JavaScript, así que si tenemos una matriz como la siguiente:
y ahora verificamos si 6 está en el índice 5 o no:
y obtenemos
undefined
...Así que básicamente nos da la respuesta, la mejor manera de verificar si no está definida, así que algo como esto:
Es mejor NO hacer esto en este caso:
Porque imagina que tenemos esta matriz:
y hacemos:
Entonces, como puede ver, incluso 0 está allí, no se reconoce, hay algunas otras cosas que pueden hacer lo mismo y hacer que la aplicación tenga errores, así que tenga cuidado, los enumero todos:
undefined
''
fuente
Me gustaría señalar algo que algunos parecen haber pasado por alto: a saber, es posible tener una posición de matriz "vacía" en el medio de la matriz. Considera lo siguiente:
La forma natural de verificar sería ver si el miembro de la matriz no está definido, no estoy seguro si existen otras formas
fuente
intente esto si la matriz [índice] es nula
fuente
Con Lodash, puedes hacer:
if(_.has(req,'documents'))
es verificar si nuestro objeto de solicitud tiene una propiedad llamadadocuments
y si tiene ese accesorio, el siguienteif (req.documents.length)
es validar si no es una matriz vacía, para queforEach
se puedan continuar con las otras cosas .fuente
Para verificar si nunca se ha definido o si se eliminó:
también funciona con matrices asociativas y matrices donde eliminó algún índice
Para verificar si nunca se definió, se eliminó O es un valor vacío nulo o lógico (NaN, cadena vacía, falso):
fuente
Me encontré con este problema usando tablas de datos laravel. Estaba almacenando un valor JSON llamado
properties
en un registro de actividad y quería mostrar un botón basado en este valor vacío o no.Bueno, datatables estaba interpretando esto como una matriz si estaba vacía, y un objeto si no lo estaba, por lo tanto, la siguiente solución funcionó para mí:
Un objeto no tiene una propiedad de longitud.
fuente
Creo que esta decisión es apropiada para los chicos que prefieren la programación funcional declarativa sobre la OOP imperativa o la procesal. Si su pregunta es " ¿Hay algunos valores dentro? (Un valor verdadero o falso)" puede usar el
.some
método para validar los valores internos.function isEmpty(arr) { ... }
.[].length
lo0
que resulta peligroso en algunos casos.[].length > 0
dicho "¿Su longitud es mayor que cero?"Ejemplos avanzados:
fuente
Puede usar la biblioteca Loadsh para hacer esto de manera más eficiente, como:
si tiene una matriz llamada "mascotas", por ejemplo:
Para verificar todos los valores de matriz para valores nulos o indefinidos:
Vea más ejemplos en http://underscorejs.org/
fuente
fn(){}
es un error de sintaxis, y no está claro en absoluto cómo esto ayuda a verificar si un elemento de matriz existe en un determinado índice o no.