87 votes

Supprimez les propriétés vides / les valeurs fantaisistes des objets avec Underscore.js

J'ai un objet avec plusieurs propriétés. Je voudrais supprimer toutes les propriétés qui ont des valeurs erronées.

Cela peut être réalisé avec compact sur les tableaux, mais qu'en est-il des objets ?

9voto

webwise Points 269

Vous pouvez créer un clone peu profond :

_(obj).reduce(function(a,v,k){ 
     if(v){ a[k]=v; } 
     return a; 
},{});

5voto

Anoop Points 12862

Pour l'utilisation de l'objet supprimer.

for(var k in obj){

  if(obj.hasOwnProperty(k) && !obj[k]){
    delete obj[k];
  }
}

5voto

Marco Godínez Points 529

Soudain, j'ai eu besoin de créer une fonction pour supprimer récursivement les falsificateurs. J'espère que cela vous aidera. J'utilise Lodash.

var removeFalsies = function (obj) {
    return _.transform(obj, function (o, v, k) {
        if (v && typeof v === 'object') {
            o[k] = _.removeFalsies(v);
        } else if (v) {
            o[k] = v;
        }
    });
};

_.mixin({ 'removeFalsies': removeFalsies });

Alors vous pouvez l'utiliser :

var o = _.removeFalsies({
  foo: 'bar',
  a: 0,
  b: false,
  c: '',
  d: null,
  e: undefined,
  obj: {
    foo: 'bar',
    a: 0,
    b: false,
    c: '',
    d: null,
    e: undefined
  }
});

// {
//   foo: 'bar',
//   obj: {
//     foo: 'bar'
//   }
// }

1voto

Geoff Lee Points 57

Pour compléter la réponse de gion_13 :

_.mixin({
  compactObject : function(o) {
     var newObject = {};
     _.each(o, function(v, k) {
       if(v !== null && v !== undefined) {
         newObject[k] = v
       }
     });
     return newObject;
  }
});

Celui-ci crée un nouvel objet et ajoute des clés et des valeurs au lieu de tout cloner et de supprimer les paires clé-valeur. Une différence mineure.

Mais surtout, il vérifie explicitement l'existence de null et d'undefined au lieu de falsey, qui supprimera les paires clé-valeur ayant false comme valeur.

1voto

Haseeb Eqx Points 484

Vous devez utiliser pickBy de lodash.

La signature par défaut de pickBy est _.(sourceObj, [_.identity]) afin de supprimer les propriétés vides

_.pickBy(sourceObj);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X