Je vais avoir un tableau javascript.
addresses = new Array(document.client.cli_Build.value,
document.client.cli_Address.value,
document.client.cli_City.value,
document.client.cli_State.value,
document.client.cli_Postcode.value,
document.client.cli_Country.value);
document.client.cli_PostalAddress.value = addresses.join(", ");
Je dois copier le contenu de toutes ces valeurs de tableau vers l'adresse postale textarea. quand j'utilise la fonction de jointure ci-dessus, une virgule a été ajoutée pour les valeurs nulles. Comment supprimer cette virgule supplémentaire?
Merci
Vous pouvez utiliser filter
pour filtrer les valeurs null :
addresses.filter(function(val) { return val !== null; }).join(", ")
Une autre alternative de filtre
myArray.filter(function(val){if(val)return val}).join(", ")
document.write(['this','','',,,,'is','a',,,'test'].filter(function(val){if(val)return val}).join(", "));
Underscore est une bibliothèque d’utilitaires Nice pour la programmation fonctionnelle et la manipulation de listes:
_.filter(addresses, function(val) { return val !== null; }).join(", ");
Edit: Et il existe un moyen plus compact (Merci Andrew De Andrade!):
_.compact(addresses).join(", ");
Utilisez le code suivant pour supprimer les valeurs null
uniquement, son plus court et plus simple:
addresses = addresses.filter(n => (n===null) ? false : true).join(', ');
document.client.cli_PostalAddress.value = addresses;
Si vous souhaitez supprimer les valeurs null
, 0
, false
& ""
(chaîne vide), utilisez ceci:
document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', ');
On pourrait aussi utiliser Array.prototype.reduce () .
Il réduit un tableau à une valeur unique, par exemple. un string. Ainsi:
addresses.reduce(function (a, b) {
if (a && b) { return a + ', ' + b; }
if (a) { return a; }
return b;
}, '');
a
contient le résultat intermédiaire, b
contient l'élément en cours.
document.client.cli_PostalAddress.value =
document.client.cli_PostalAddress.value.replace(/(, )+/g,", ");
Ou devrait-il être
document.client.cli_PostalAddress.value =
document.client.cli_PostalAddress.value
.replace(/(null, )/g,"").replace(/(, null)/g,"");
??
Si vous souhaitez éliminer tous les éléments non définis, null, NaN, "", 0, un moyen simple de le faire consiste à utiliser une combinaison de la fonction de rappel du filtre et de la fonction booléenne.
var filterArr=arr.filter(function(val){
return Boolean(val);
});
Lorsque vous transmettez une valeur à la fonction booléenne, si la valeur est omise ou vaut 0, -0, null, false, NaN, la chaîne non définie ou la chaîne vide (""), la valeur initiale de l'objet est false.
Voici un exemple de cette utilisation:
function bouncer(arr) {
var filterArr=arr.filter(function(val){
return Boolean(val);
});
return filterArr;
}
Voici quelques tests:
bouncer([1, null, NaN, 2, undefined]);//should return [1, 2]
bouncer([7, "ate", "", false, 9]);// should return [7, "ate", 9]
bouncer(["a", "b", "c"]);// should return ["a", "b", "c"]
bouncer([false, null, 0, NaN, undefined, ""]);//should return []
address.filter (Boolean) .join (",")