Introduction
Dans ce laboratoire, nous allons explorer la manière d'utiliser la récursion pour supprimer profondément toutes les valeurs fausses d'un objet ou d'un tableau en JavaScript. Nous allons créer une fonction qui prend un objet ou un tableau en entrée et renvoie un nouvel objet ou tableau compacté ne contenant que les valeurs véridiques. Cette technique peut être utile pour le nettoyage et la simplification des données dans diverses applications de programmation.
Algorithme pour compactifier un objet
Pour supprimer profondément toutes les valeurs fausses d'un objet ou d'un tableau, utilisez l'algorithme suivant :
- Utilisez la récursion pour appeler la fonction
compactObject()sur chaque objet ou tableau imbriqué. - Initialisez les données itérables à l'aide de
Array.isArray(),Array.prototype.filter()etBoolean(). Cela est fait pour éviter les tableaux creux. - Utilisez
Object.keys()etArray.prototype.reduce()pour itérer sur chaque clé avec une valeur initiale appropriée. - Utilisez
Boolean()pour déterminer la véracité de la valeur de chaque clé et l'ajoutez à l'accumulateur si elle est véridique. - Utilisez
typeofpour déterminer si une valeur donnée est unobjetet appelez la fonction à nouveau pour la compactifier profondément.
Voici le code pour la fonction compactObject() :
const compactObject = (val) => {
const data = Array.isArray(val) ? val.filter(Boolean) : val;
return Object.keys(data).reduce(
(acc, key) => {
const value = data[key];
if (Boolean(value))
acc[key] = typeof value === "object" ? compactObject(value) : value;
return acc;
},
Array.isArray(val) ? [] : {}
);
};
Pour utiliser cette fonction, passez un objet ou un tableau en tant qu'argument à compactObject(). La fonction renverra un nouvel objet ou tableau avec toutes les valeurs fausses supprimées.
Par exemple :
const obj = {
a: null,
b: false,
c: true,
d: 0,
e: 1,
f: "",
g: "a",
h: [null, false, "", true, 1, "a"],
i: { j: 0, k: false, l: "a" }
};
compactObject(obj);
// { c: true, e: 1, g: 'a', h: [ true, 1, 'a' ], i: { l: 'a' } }
Sommaire
Félicitations ! Vous avez terminé le laboratoire Compact Object. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.