web-dev-qa-db-fra.com

Supprimer les valeurs nulles du tableau javascript

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

21
Krishna Priya

Vous pouvez utiliser filter pour filtrer les valeurs null :

addresses.filter(function(val) { return val !== null; }).join(", ")
37
Gumbo

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(", "));

6
Dave Brown

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(", ");
5
Victor

Utilisez filter pour supprimer toutes les valeurs falsy :

var list = [null, undefined, 0, 1, 2, '', 'test'];

// ES5:
var result = list.filter(Boolean).join(', ');
console.log(result);

// ES6, saves 3 characters:
var result = list.filter(x => x).join(', ');
console.log(result);

3
Valentin

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(', ');
1
IamMHussain

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.

0
DerMike
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,"");

??

0
Victor

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 []
0
frzhen

address.filter (Boolean) .join (",")

0
rehan