Supprimer les valeurs vides et nulles de l'objet imbriqué (ES6) - Nettoyer les objets imbriqués


Toucouleur

J'ai un objet qui ressemble à ceci:

{
    "a": "string not empty",
    "b": {
        "c": "string not empty",       
    },
    "d": {
        "e": false,
        "f": 0,
        "g": true,
        "h": 10
    },
    "i": {
        "j": 0,
        "k": null
    },
    "l": {
        "m": null
    },
    "n": {
        "o": 1,
        "p": "string (not empty)",
        "q": {}
    },
    "r": [],
    "l": "2000-01-01T01:01:00.000Z",
}

Grâce au code fourni par ici: https://stackoverflow.com/a/38364486/3912805 je peux maintenant supprimer toutes les nullvaleurs de mon objet imbriqué.

J'ai utilisé cette fonction jusqu'à présent pour removeNull:

removeNull = (obj) => {
  Object.keys(obj).forEach(key =>
    (obj[key] && typeof obj[key] === 'object') && removeNull(obj[key]) ||
    (obj[key] === undefined || obj[key] === null) && delete obj[key]
  );
  return obj;
};

Mais je voudrais améliorer cette fonction pour me permettre de supprimer tous les tableaux vides ou toute collection vide qui peut exister dans mon objet imbriqué.

Les résultats finaux devraient être sans k , let m, q, r, l:

{
    "a": "string not empty",
    "b": {
        "c": "string not empty",       
    },
    "d": {
        "e": false,
        "f": 0,
        "g": true,
        "h": 10
    },
    "i": {
        "j": 0
    },
    "n": {
        "o": 1,
        "p": "string (not empty)"
    },
    "l": "2000-01-01T01:01:00.000Z",
}

Je dois conserver toutes les valeurs définies sur 0ou sur false.

Je voudrais améliorer cette removeNullméthode en utilisant la méthode ES6, mais jusqu'à présent je n'ai pas réussi à le faire.

J'ai également essayé la méthode de la vieille école qui a été utilisée pour cela Comment supprimer profondément les valeurs nulles, les objets vides et le tableau vide d'un objet

itemToBool = item => {
  if (typeof item !== 'object' || item === null) return item;
  const cleanedItem = cleanObject(item);
  return Object.keys(cleanedItem).length !== 0 && cleanedItem;
};

cleanObject = obj => {
  if (Array.isArray(obj)) {
    const newArr = obj.map(itemToBool).filter(Boolean);
    return newArr.length && newArr;
  }
  const newObj = Object.entries(obj).reduce((a, [key, val]) => {
    const newVal = itemToBool(val);
    if (newVal !== null || newVal === false) a[key] = newVal;
    return a;
  }, {});
  return Object.keys(newObj).length > 0 && newObj;
};

mais cela échoue aussi.

Nina Scholz

Vous pouvez adopter une approche simple en itérant les paires clé / valeur de l'objet et en itérant d'abord les objets itérables imbriqués, puis en supprimant les clés indésirables.

function clean(object) {
    Object
        .entries(object)
        .forEach(([k, v]) => {
            if (v && typeof v === 'object') {
                clean(v);
            }
            if (v && typeof v === 'object' && !Object.keys(v).length || v === null || v === undefined) {
                if (Array.isArray(object)) {
                    object.splice(k, 1);
                } else {
                    delete object[k];
                }
            }
        });
    return object;
}

var object = { a: "string not empty", b: { c: "string not empty" }, d: { e: false, f: 0, g: true, h: 10 }, i: { j: 0, k: null }, l: { m: null }, n: { o: 1, p: "string (not empty)", q: {} }, r: [{ foo: null }] };

console.log(clean(object));
.as-console-wrapper { max-height: 100% !important; top: 0; }

Articles connexes


supprimer les valeurs nulles imbriquées du tableau javascript

NOUVEAU Mon tableau javascript est comme ci-dessous. Je souhaite supprimer toutes les valeurs nulles dans tous les tableaux enfants. J'ai réussi à supprimer comme ci-dessous. mais je recherche une solution plus élégante autre que celle-ci let data = [

Comment supprimer les objets vides imbriqués en JavaScript ?

Jimi Je souhaite supprimer les objets vides d'un JSON imbriqué. J'ai vérifié pas mal de réponses sur SA mais aucune d'entre elles ne fait ce dont j'ai besoin. toute aide est appréciée. Je pensais que je pourrais peut-être réduire l'objet qui fonctionne, mais j

Comment supprimer les valeurs nulles des tableaux imbriqués

utilisateur10584873 Ce code supprime toutes les valeurs nulles du tableau : var array = [ 0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,, ]; var filtered = array.filter(function (el) { return el != null; }); console.log(filtered); Mais lorsque j