¿Cómo verifico en JavaScript si existe un valor en un determinado índice de matriz?
¿Funcionará esto para probar si index
existe un valor en la posición o no, o hay una manera mejor?
if(arrayName[index]==""){
// do stuff
}
Conceptualmente, las matrices en JavaScript contienen array.length
elementos, desde array[0]
hasta array[array.length - 1]
. Un elemento de matriz con índice i
se define como parte de la matriz si i
está entre 0
e array.length - 1
inclusive. Si no estoy en este rango, no está en la matriz.
Entonces, por concepto, las matrices son lineales, comienzan con cero y llegan a un máximo, sin ningún mecanismo para tener "espacios" dentro de ese rango donde no existen entradas. Para saber si existe un valor en un índice de posición determinado (donde el índice es 0 o un entero positivo), literalmente simplemente usa
if (i >= 0 && i < array.length) {
// it is in array
}
Ahora, bajo el capó, es casi seguro que los motores JavaScript 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. No obstante, el lenguaje JavaScript quiere presentar matrices de array.length
n con n miembros y se denominan 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 nunca su valor: por ejemplo, si agrega valores de matriz aumentando la array.length
propiedad, cualquier valor nuevo será undefined
.
Para determinar si un valor dado es algo significativo o ha sido definido. Es decir, no undefined
, o null
:
if (typeof array[index] !== 'undefined') {
o
if (typeof array[index] !== 'undefined' && array[index] !== null) {
Curiosamente, debido a las reglas de comparación de JavaScript, mi último ejemplo se puede optimizar hasta esto:
if (array[index] != null) {
// The == and != operators consider null equal to only null or undefined
}
¿No podemos simplemente hacer esto?
if(arrayName.length > 0){
//or **if(arrayName.length)**
//this array is not empty
}else{
//this array is empty
}
Usar solo .length
no es seguro y provocará un error en algunos navegadores. Aquí hay una mejor solución:
if(array && array.length){
// not empty
} else {
// empty
}
o podemos usar:
Object.keys(__array__).length
if(!arrayName[index]){
// do stuff
}
if(arrayName.length > index && arrayName[index] !== null) {
//arrayName[index] has a value
}