Aplatir un objet JavaScript avec récursion

JavaScriptJavaScriptBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer une fonction JavaScript qui aplatit un objet en ajoutant les chemins pour les clés. La fonction utilise la récursion et Object.keys() combinée avec Array.prototype.reduce() pour convertir chaque nœud feuille en un nœud de chemin aplati. À la fin de ce laboratoire, vous aurez une meilleure compréhension de la manière de manipuler les objets JavaScript et de les aplatir pour un traitement de données plus facile.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") javascript/AdvancedConceptsGroup -.-> javascript/destr_assign("Destructuring Assignment") javascript/AdvancedConceptsGroup -.-> javascript/template_lit("Template Literals") subgraph Lab Skills javascript/variables -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/data_types -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/arith_ops -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/comp_ops -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/cond_stmts -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/array_methods -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/higher_funcs -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/destr_assign -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} javascript/template_lit -.-> lab-28312{{"Aplatir un objet JavaScript avec récursion"}} end

Aplatir un objet

Pour aplatir un objet en ajoutant les chemins pour les clés, suivez ces étapes :

  1. Ouvrez le Terminal/SSH et tapez node pour commencer à pratiquer la programmation.
  2. Utilisez la récursion pour aplatir l'objet.
  3. Utilisez Object.keys() combinée avec Array.prototype.reduce() pour convertir chaque nœud feuille en un nœud de chemin aplati.
  4. Si la valeur d'une clé est un objet, appelez la fonction de manière récursive avec le prefix approprié pour créer le chemin à l'aide de Object.assign().
  5. Sinon, ajoutez la paire clé-valeur préfixée appropriée à l'objet accumulateur.
  6. Omettez le second argument, prefix, sauf si vous voulez que chaque clé ait un préfixe.

Voici une implémentation d'exemple :

const flattenObject = (obj, prefix = "") =>
  Object.keys(obj).reduce((acc, k) => {
    const pre = prefix.length ? `${prefix}.` : "";
    if (
      typeof obj[k] === "object" &&
      obj[k] !== null &&
      Object.keys(obj[k]).length > 0
    ) {
      Object.assign(acc, flattenObject(obj[k], pre + k));
    } else {
      acc[pre + k] = obj[k];
    }
    return acc;
  }, {});

Vous pouvez utiliser la fonction flattenObject comme ceci :

flattenObject({ a: { b: { c: 1 } }, d: 1 }); // { 'a.b.c': 1, d: 1 }

Sommaire

Félicitations ! Vous avez terminé le laboratoire Aplatir un objet. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.