Ce script supprime les propriétés de manière récursive sauf les données indiquées dans le vecteur.
Vous avez besoin de la bibliothèque lodash
-- Fonction:
function removeKeysExcept(object, keysExcept = [], isFirstLevel = true) {
let arrayKeysExcept = [],
arrayNextKeysExcept = {};
_.forEach(keysExcept, (value, i) => {
let j = value.split('.');
let keyExcept = j[0];
arrayKeysExcept.push(keyExcept);
j.shift();
if (j.length) {
j = j.join('.');
if (!arrayNextKeysExcept[keyExcept]) {
arrayNextKeysExcept[keyExcept] = [];
}
arrayNextKeysExcept[keyExcept].push(j);
}
})
_.forEach(arrayNextKeysExcept, (value, key) => {
removeKeysExcept(object[key], value, false);
});
if (isFirstLevel) {
return;
}
Object.keys(object).forEach(function (key) {
if (arrayKeysExcept.indexOf(key) == -1) {
delete object[key];
}
});
}
Exécuter ainsi:
-- Supprime toutes les propriétés sauf le premier niveau et celles indiquées dans le vecteur :
removeKeysExcept(obj, ['department.id','user.id']);
-- Supprime toutes les propriétés
removeKeysExcept(obj, ['department.id','user.id'], false);
-- Exemple:
let obj = {
a: {
aa: 1,
ab: {
aba: 21
}
},
b: 10,
c: {
ca: 100,
cb: 200
}
};
removeKeysExcept(obj, ['a.ab.aba','c.ca']);
/*SORTIE: {
a: {
ab: {
aba: 21
}
},
b: 10,
c: {
ca: 100,
}
};*/
removeKeysExcept(obj, ['a.ab.aba','c.ca'], false); //Suppression du premier niveau
/*SORTIE: {
a: {
ab: {
aba: 21
}
},
c: {
ca: 100,
}
};*/
removeKeysExcept(obj);
/*SORTIE: {b:10};*/
removeKeysExcept(obj, [], false); //Suppression du premier niveau
/*SORTIE: {};*/