¿Cómo verificar si la matriz está vacía o no existe? [duplicate]

4 minutos de lectura

avatar de usuario
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
}

  • 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

avatar de usuario
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
}

Actualizar

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:

  1. 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.

  2. É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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad