2011-08-25 21 views
83

Vorrei sapere come verificare se un array è vuoto o nullo in jQuery. Ho provato array.length === 0 ma non ha funzionato. Non ha generato alcun errore neanche.Verifica se l'array è vuoto o nullo

Questo è il codice:

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 
} 
+2

Allo stesso modo di "JavaScript normale": http: // stackoverflow.it/questions/2672380/how-do-i-check-if-a-javascript-array-valore-is-empty-or-null –

+1

@Julien, ho provato tutte quelle soluzioni elencate in quella discussione prima di iniziare questa discussione. Nessuno di loro ha funzionato in qualche modo. – input

+0

Possiamo ottenere più codice per il contesto? JavaScript che circonda, HTML? Sei sicuro che '$ (" input [nome = 'album_text []'] ")' sta effettivamente restituendo gli elementi? –

risposta

123

Finché il selettore funziona, non vedo nulla di sbagliato nel codice che controlla la lunghezza dell'array. Quello dovrebbe fare quello che vuoi. Ci sono molti modi per ripulire il tuo codice per essere più semplice e più leggibile. Ecco una versione ripulita con note su ciò che ho pulito.

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 
} 

Alcune note su quello che stavi facendo e ciò che ho cambiato.

  1. $(this) è sempre un oggetto jQuery valida quindi non c'è alcun motivo per controllare mai if ($(this)). Potresti non avere alcun oggetto DOM al suo interno, ma puoi verificarlo con $(this).length se necessario, ma non è necessario qui perché il ciclo .each() non verrebbe eseguito se non ci fossero articoli in modo che $(this) all'interno del tuo ciclo .each() sarà sempre qualcosa.
  2. È inefficiente utilizzare $ (questo) più volte nella stessa funzione. Molto meglio ottenerlo una volta in una variabile locale e quindi usarlo da quella variabile locale.
  3. Si consiglia di inizializzare gli array con [] anziché new Array().
  4. if (value) quando il valore dovrebbe essere una stringa saranno entrambi proteggere dalla value == null, value == undefined e value == "" quindi non c'è bisogno di fare if (value && (value != "")). Basta fare: if (value) per verificare tutte e tre le condizioni vuote.
  5. if (album_text.length === 0) dirà se la matrice è vuota fintanto che è una matrice inizializzata valida (che è qui).

Che cosa stai cercando di fare con questo selettore $("input[name='album_text[]']")?

+5

@MaciekSemik - consultare http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons. Io uso sempre l'uguaglianza rigorosa ('===') a meno che non voglia specificamente consentire una conversione del tipo. È una buona abitudine entrare. – jfriend00

6

Si dovrebbe verificare la presenza di '' (stringa vuota) prima di spingere nel vostro array. Il tuo array ha elementi che sono stringhe vuote. Quindi il tuo album_text.length === 0 funzionerà perfettamente.

+0

Si prega di consultare il codice aggiornato. Ho aggiunto questo codice 'if ($ (this) .val() && $ (this) .val()! = '')' Eppure non funziona. – input

55

Utente JQuery è EmptyObject per verificare se la matrice contiene elementi oppure no.

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

Molto più affidabile del controllo della lunghezza, soprattutto se la variabile può anche essere un oggetto (con oggetti, la lunghezza non funziona per verificare se è vuota). – gaborous

+0

Questa è la risposta più appropriata secondo me. – earl3s

+3

'isEmptyObject' restituisce sempre' false' se 'Array.prototype' è esteso, ad es. 'Array.prototype.someFunction = function() {};' - anche se l'array è vuoto. Si noti che alcuni framework (ad es. Ember.js) estendono il prototipo di array per impostazione predefinita. – jesenko

6

ritengo sia pericoloso usare $ .isEmptyObject da jquery per verificare se l'array è vuoto, come @jesenko menzionato. Ho appena incontrato quel problema.

Nel isEmptyObject doc, si parla:

L'argomento dovrebbe essere sempre un semplice JavaScript Object

che è possibile determinare da $.isPlainObject. Il reso di $.isPlainObject([]) è falso.

Problemi correlati