jquery - nodejs - Compruebe si la matriz está vacía o nula
is empty jquery (4)
Me gustaría saber cómo verificar si una matriz está vacía o nula en jQuery. Intenté 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
}
Creo que es peligroso usar $ .isEmptyObject de jquery para verificar si la matriz está vacía, como mencionó @jesenko. Acabo de conocer ese problema.
En el documento isEmptyObject , menciona:
El argumento siempre debe ser un objeto JavaScript simple
que puedes determinar por $.isPlainObject
. El retorno de $.isPlainObject([])
es falso.
Debería verificar ''''
(cadena vacía) antes de ingresar a su matriz. Su matriz tiene elementos que son cadenas vacías. Entonces tu album_text.length === 0
funcionará bien.
El usuario JQuery es EmptyObject para verificar si la matriz 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
Siempre que su selector esté funcionando, no veo nada incorrecto con su código que verifique la longitud de la matriz. Eso debería hacer lo que quieras. Hay muchas maneras de limpiar su código para que sea más simple y más legible. Aquí hay una versión limpia con notas sobre lo que limpié.
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.
-
$(this)
es siempre un objeto jQuery válido, por lo que no hay motivo para verificarif ($(this))
. Puede que no tenga ningún objeto DOM dentro, pero puedes verificarlo con$(this).length
si es necesario, pero eso no es necesario aquí porque el.each()
no se ejecutaría si no hubiera elementos.$(this)
dentro de tu.each()
siempre será algo. - Es ineficaz usar $ (esto) varias veces en la misma función. Es mucho mejor conseguirlo una vez en una variable local y luego usarlo desde esa variable local.
- Se recomienda inicializar matrices con
[]
lugar de unanew Array()
. -
if (value)
cuando se espera que el valor sea una cadena, ambas protegerán delvalue == null
,value == undefined
yvalue == ""
por lo que no tiene que hacerif (value && (value != ""))
Puede hacer:if (value)
para verificar las tres condiciones vacías. -
if (album_text.length === 0)
le dirá si la matriz está vacía, siempre que sea una matriz válida inicializada (que está aquí).
¿Qué estás tratando de hacer con este selector $("input[name=''album_text[]'']")
?