Rimuovere gli elementi vuoti da un array in Javascript
Come rimuovo gli elementi vuoti da un array in JavaScript?
C'è un modo semplice o devo fare un ciclo e rimuoverli manualmente?
987
3
Come rimuovo gli elementi vuoti da un array in JavaScript?
C'è un modo semplice o devo fare un ciclo e rimuoverli manualmente?
EDIT: A questa domanda è stata data una risposta quasi nove anni fa, quando non c'erano molti metodi integrati utili nel
Array.prototype
.Ora, certamente, vi consiglierei di usare il metodo
filter
.Tenete presente che questo metodo vi restituirà un nuovo array con gli elementi che superano i criteri della funzione di callback che gli fornite.
Per esempio, se volete rimuovere i valori
null
oundefined
:Dipenderà da cosa consideri come "vuoto" per esempio, se tu avessi a che fare con delle stringhe, la funzione di cui sopra non rimuoverebbe gli elementi che sono una stringa vuota.
Uno schema tipico che vedo spesso usato è quello di rimuovere gli elementi che sono falsy, che includono una stringa vuota
""
,0
,NaN
,null
,undefined
, efalse
.Puoi passare al metodo
filter
, la funzione costruttoreBoolean
, o restituire lo stesso elemento nella funzione dei criteri del filtro, per esempio:Oppure
In entrambi i modi, questo funziona perché il metodo
filter
nel primo caso, chiama il costruttoreBoolean
come funzione, convertendo il valore, e nel secondo caso, il metodofilter
trasforma internamente il valore di ritorno della callback implicitamente inBoolean
.Se state lavorando con array sparsi, e state cercando di sbarazzarvi dei "buchi", potete usare il metodo
filter
passando una callback che restituisce true, per esempio:Vecchia risposta: Non farlo!
Io uso questo metodo, estendendo il prototipo nativo di Array:
Oppure puoi semplicemente spingere gli elementi esistenti in un altro array:
Potreste trovare più facile fare un loop sul vostro array e costruire un nuovo array con gli elementi che volete mantenere dall'array, piuttosto che provare a fare un loop e splice come è stato suggerito, poiché modificare la lunghezza dell'array mentre è in loop può introdurre problemi.
Potreste fare qualcosa del genere:
In realtà ecco una soluzione più generica:
Hai capito l'idea - potresti poi avere altri tipi di funzioni di filtro. Probabilmente è più di quanto hai bisogno, ma mi sentivo generoso... ;)
Provate questo. Passategli il vostro array e ritornerà con gli elementi vuoti rimossi. *Aggiornato per risolvere il bug segnalato da Jason