Cela donne l'impression que cela devrait être simple, donc désolé s'il me manque quelque chose ici, mais j'essaie de trouver un moyen simple de concaténer uniquement des chaînes non nulles ou non vides.
J'ai plusieurs champs d'adresse distincts:
var address;
var city;
var state;
var zip;
Les valeurs de ceux-ci sont définies en fonction de certains champs de formulaire de la page et d'un autre code js.
Je veux afficher l'adresse complète dans un div
, délimité par une virgule + espace, donc quelque chose comme ceci:
$("#addressDiv").append(address + ", " + city + ", " + state + ", " + zip);
Le problème est qu'un ou tous ces champs peuvent être nuls / vides.
Existe-t-il un moyen simple de joindre tous les champs non vides de ce groupe de champs, sans vérifier la longueur de chacun individuellement avant de l'ajouter à la chaîne?
javascript
string
froadie
la source
la source
Réponses:
Considérer
.filter(Boolean)
(qui est le même que.filter(x => x)
) supprime toutes les valeurs "fausses" (nulles, non définies, chaînes vides, etc.). Si votre définition de "vide" est différente, vous devrez la fournir, par exemple:ne conservera que les chaînes non vides dans la liste.
-
(réponse jquery obsolète)
la source
Encore une autre solution en une ligne, qui ne nécessite pas
jQuery
:la source
[address, city, state, zip].filter(val => val).join(', ')
Solution Lodash :
_.filter([address, city, state, zip]).join()
la source
Juste:
la source
La solution de @ aga est excellente, mais elle ne fonctionne pas dans les anciens navigateurs comme IE8 en raison du manque de Array.prototype.filter () dans leurs moteurs JavaScript.
Pour ceux qui sont intéressés par une solution efficace fonctionnant dans un large éventail de navigateurs (y compris IE 5.5 - 8) et qui ne nécessite pas jQuery , voir ci-dessous:
Il inclut quelques optimisations de performances décrites sur MDN ici .
Et voici un exemple d'utilisation:
la source
Essayer
Démo: Fiddle
la source
la source