¿Cómo verifico en JavaScript si existe un valor en un determinado índice de matriz?

Resuelto Ankur asked hace 14 años • 19 respuestas

¿Funcionará esto para probar si indexexiste un valor en la posición o no, o hay una manera mejor?

if(arrayName[index]==""){
     // do stuff
}
Ankur avatar Apr 20 '10 10:04 Ankur
Aceptado

Conceptualmente, las matrices en JavaScript contienen array.lengthelementos, desde array[0]hasta array[array.length - 1]. Un elemento de matriz con índice ise define como parte de la matriz si iestá entre 0e array.length - 1inclusive. 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.lengthpropiedad, 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
}  
thomasrutter avatar Apr 20 '2010 03:04 thomasrutter

¿No podemos simplemente hacer esto?

if(arrayName.length > 0){   
    //or **if(arrayName.length)**
    //this array is not empty 
}else{
   //this array is empty
}
madi avatar Oct 17 '2013 06:10 madi

Usar solo .lengthno 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
Joni avatar Aug 18 '2016 08:08 Joni
if(!arrayName[index]){
     // do stuff
}
x2. avatar Apr 20 '2010 03:04 x2.
if(arrayName.length > index && arrayName[index] !== null) {
    //arrayName[index] has a value
}
Rex M avatar Apr 20 '2010 03:04 Rex M