43 votos

Comprobar si la matriz está vacía o es nula

Me gustaría saber cómo comprobar si un Array está vacío o es nulo en jQuery. He intentado array.length === 0 pero no funcionó. Tampoco arrojó ningún error.

Este es el código:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}

66voto

jfriend00 Puntos 152127

Mientras tu selector funcione realmente, no veo nada malo en tu código que comprueba la longitud del Array. Eso debería hacer lo que quieres. Hay muchas maneras de limpiar tu código para que sea más simple y legible. Aquí hay una versión limpia con notas sobre lo que he limpiado.

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Algunas notas sobre lo que estabas haciendo y lo que he cambiado.

  1. $(this) es siempre un objeto jQuery válido, por lo que no hay razón para comprobar nunca if ($(this)) . Es posible que no tenga ningún objeto DOM en su interior, pero puede comprobarlo con $(this).length si es necesario, pero eso no es necesario aquí porque el .each() El bucle no se ejecutaría si no hubiera elementos así que $(this) dentro de su .each() El bucle siempre será algo.
  2. Es ineficiente utilizar $(this) varias veces en la misma función. Es mucho mejor meterlo una vez en una variable local y luego usarlo desde esa variable local.
  3. Se recomienda inicializar las matrices con [] en lugar de new Array() .
  4. if (value) cuando se espera que el valor sea una cadena protegerá tanto de value == null , value == undefined y value == "" para no tener que hacer if (value && (value != "")) . Puedes hacerlo: if (value) para comprobar las tres condiciones de vacío.
  5. if (album_text.length === 0) le dirá si el Array está vacío siempre que sea un Array válido e inicializado (lo que es aquí).

¿Qué está tratando de hacer con este selector? $("input[name='album_text[]']") ?

33voto

Mayank Raipure Puntos 343

El usuario JQuery es EmptyObject para comprobar si el Array contiene elementos o no.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true

3voto

Daniel A. White Puntos 91889

Debe comprobar que '' (cadena vacía) antes de empujar en su Array. Su Array tiene elementos que son cadenas vacías. Entonces su album_text.length === 0 funcionará bien.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X