¿Cuál es la mejor manera de verificar si una matriz está vacía o no existe?
¿Algo como esto?
if(array.length < 1 || array == undefined){
//empty
}
Loco
¿Cuál es la mejor manera de verificar si una matriz está vacía o no existe?
¿Algo como esto?
if(array.length < 1 || array == undefined){
//empty
}
Robby Cornelissen
Quiere hacer el cheque para undefined
primero. Si lo hace al revés, generará un error si la matriz no está definida.
if (array === undefined || array.length == 0) {
// array empty or does not exist
}
Esta respuesta está recibiendo bastante atención, por lo que me gustaría señalar que mi respuesta original, más que cualquier otra cosa, abordó el orden incorrecto de las condiciones que se evalúan en la pregunta. En este sentido, no aborda varios escenarios, como null
valores, otro tipo de objetos con un length
propiedad, etc. Tampoco es JavaScript muy idiomático.
El enfoque infalible
Inspirándome en los comentarios, a continuación se muestra lo que actualmente considero que es la forma infalible de verificar si una matriz está vacía o no existe. También tiene en cuenta que la variable puede no referirse a una matriz, sino a algún otro tipo de objeto con un length
propiedad.
if (!Array.isArray(array) || !array.length) {
// array does not exist, is not an array, or is empty
// ⇒ do not attempt to process array
}
Para desglosarlo:
Array.isArray()
, como era de esperar, comprueba si su argumento es una matriz. Esto elimina valores como null
, undefined
y cualquier otra cosa que no sea una matriz.
Tenga en cuenta que esto también eliminará objetos en forma de matriztales como el arguments
objeto y DOM NodeList
objetos. Dependiendo de su situación, este podría no ser el comportamiento que está buscando.
Él array.length
condición comprueba si la variable length
la propiedad se evalúa como veraz valor. Debido a que la condición anterior ya establecía que efectivamente estamos tratando con una matriz, comparaciones más estrictas como array.length != 0
o array.length !== 0
no se requieren aquí.
El enfoque pragmático
En muchos casos, lo anterior puede parecer excesivo. Tal vez esté utilizando un lenguaje de orden superior como TypeScript que realiza la mayor parte de la verificación de tipos en tiempo de compilación, o realmente no le importa si el objeto es en realidad una matriz o simplemente similar a una matriz.
En esos casos, tiendo a optar por el siguiente JavaScript más idiomático:
if (!array || !array.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
O, más frecuentemente, su inversa:
if (array && array.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}
Con la introducción de la operador de encadenamiento opcional (operador Elvis) en ECMAScript 2020, esto se puede acortar aún más:
if (!array?.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
O lo contrario:
if (array?.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}
Un Array
object no es el único objeto que tiene una propiedad de longitud. Él “más corto” forma de determinar si una variable está definida y una matriz sería esta: if (typeof varName !== 'undefined' && Object.getPrototypeOf(Object(varName)) === Object.getPrototypeOf([])) { console.log('varName is an array'); }
– Elías Van Ootegem
25 de junio de 2014 a las 8:33
let isArrayWithLength = Boolean(Array.isArray(array) && array.length);
– mynameistechno
16 dic 2016 a las 19:06
Usar ===
para evitar la advertencia de ESLint en la verificación de la condición array.length.
– kvrao127
17 de marzo de 2018 a las 10:23
@yeyo Array.length
es una propiedad de datos. No se calcula cada vez que se accede.
–Robby Cornelissen
12 de diciembre de 2018 a las 6:01
Si array
esta vacio, !array.length
es true
!!
– leoschet
13 de febrero de 2019 a las 22:32
Simplemente puede hacer esto mediante if(array && array.length){//do stuff} es una forma más compacta
– Kamrán
10 de noviembre de 2017 a las 8:15
La pregunta relacionada cómo garantizar que se cree una matriz, que es distinta de esta pregunta, que pregunta cómo saber si una matriz no existe o está vacía.
–Eduardo Brey
27 de noviembre de 2018 a las 19:24
@EdwardBrey sí, pero eso no me ayuda, no quiero crearlo y tal vez no estoy seguro de cómo eliminar la parte de creación de esas respuestas…
– Claudiu Creanga
15 de marzo de 2019 a las 11:49