421 votes

Supprimer les attributs vides d'un objet en Javascript

Comment supprimer tous les attributs qui sont undefined ou null dans un objet JavaScript ?

(La question est similaire à celle-ci pour les tableaux)

264voto

Owen Points 36009

Vous pouvez boucler l'objet :

var test = {
  test1: null,
  test2: 'somestring',
  test3: 3,
}

function clean(obj) {
  for (var propName in obj) {
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
  return obj
}

console.log(test);
console.log(clean(test));

Si vous craignez que cette suppression de propriété ne remonte pas la chaîne de type de l'objet, vous pouvez également :

function clean(obj) {
  var propNames = Object.getOwnPropertyNames(obj);
  for (var i = 0; i < propNames.length; i++) {
    var propName = propNames[i];
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
}

Quelques notes sur NULL vs undefined :

test.test1 === null; // true
test.test1 == null; // true

test.notaprop === null; // false
test.notaprop == null; // true

test.notaprop === undefined; // true
test.notaprop == undefined; // true

123voto

Ben Points 2510

Si vous utilisez lodash ou underscore.js, voici une solution simple :

var obj = {name: 'John', age: null};

var compacted = _.pickBy(obj);

Cela ne fonctionnera qu'avec lodash 4, pre lodash 4 ou underscore.js, utilisez _.pick(obj, _.identity) ;

40voto

Wumms Points 1200

Si quelqu'un a besoin d'une version récursive de la réponse d'Owen (et Eric), voici :

/**
 * Delete all null (or undefined) properties from an object.
 * Set 'recurse' to true if you also want to delete properties in nested objects.
 */
function delete_null_properties(test, recurse) {
    for (var i in test) {
        if (test[i] === null) {
            delete test[i];
        } else if (recurse && typeof test[i] === 'object') {
            delete_null_properties(test[i], recurse);
        }
    }
}

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