Détails
Supprimer les éléments vides d'un tableau en Javascript
Comment supprimer les éléments vides d'un tableau en JavaScript ?
Existe-t-il un moyen simple ou dois-je les parcourir en boucle et les supprimer manuellement ?
987
3
EDIT: Cette question a trouvé sa réponse il y a presque neuf ans, à l'époque où il n'y avait pas beaucoup de méthodes intégrées utiles dans le
Array.prototype
.Maintenant, je vous recommande certainement d'utiliser la méthode
filter
.Gardez à l'esprit que cette méthode vous retournera un nouveau tableau avec les éléments qui répondent aux critères de la fonction de rappel que vous lui fournissez.
Par exemple, si vous voulez enlever les valeurs
null
ouundefined
:Cela dépendra de ce que vous considérez comme "vide" ; par exemple, si vous aviez affaire à des chaînes de caractères, la fonction ci-dessus ne supprimerait pas les éléments qui sont une chaîne vide.
Un modèle typique que je vois souvent utilisé est de supprimer les éléments qui sont falsy, qui incluent une chaîne vide
""
,0
,NaN
,null
,undefined
, etfalse
.Vous pouvez passer à la méthode
filter
, à la fonction constructeurBoolean
, ou retourner le même élément dans la fonction de critères de filtrage, par exemple :Ou
Dans les deux cas, cela fonctionne parce que la méthode
filter
dans le premier cas, appelle le constructeurBoolean
comme une fonction, convertissant la valeur, et dans le second cas, la méthodefilter
transforme en interne la valeur de retour du callback implicitement enBoolean
.Si vous travaillez avec des tableaux épars, et que vous essayez de vous débarrasser des "trous", vous pouvez utiliser la méthode
filter
en passant un callback qui renvoie true, par exemple :Ancienne réponse: Ne faites pas ça !
J'utilise cette méthode, en étendant le prototype natif de Array :
Ou vous pouvez simplement pousser les éléments existants dans un autre tableau :
Vous pouvez trouver plus facile de boucler sur votre tableau et de construire un nouveau tableau à partir des éléments que vous voulez garder du tableau que d'essayer de boucler et de coller comme cela a été suggéré, puisque modifier la longueur du tableau pendant qu'il est bouclé peut introduire des problèmes.
Vous pourriez faire quelque chose comme ceci :
En fait, voici une solution plus générique :
Vous voyez l'idée - vous pourriez alors avoir d'autres types de fonctions de filtrage. C'est probablement plus que ce dont vous avez besoin, mais je me sentais généreux... ;)
[1] : https://stackoverflow.com/questions/281264/remove-empty-elements-from-an-array-in-javascript#281288
Essayez ceci. Passez-lui votre tableau et il retournera avec les éléments vides supprimés. *Mise à jour pour corriger le bug signalé par Jason