"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Aplatir un objet profondément imbriqué : un guide étape par étape

Aplatir un objet profondément imbriqué : un guide étape par étape

Publié le 2024-11-01
Parcourir:724

Flattening a Deeply Nested Object: A Step-by-Step Guide

Comprendre le problème
Nous rencontrons souvent des structures de données complexes dans les applications JavaScript. Ces structures peuvent être des objets profondément imbriqués, ce qui rend difficile leur manipulation ou leur traitement direct. Une opération courante consiste à aplatir ces objets, en les transformant en une structure plus simple où toutes les propriétés sont au niveau supérieur.

Dans ce blog, nous examinerons un extrait de code JavaScript qui aplatit efficacement un objet profondément imbriqué. Nous décomposerons le code ligne par ligne, expliquant sa logique et ses fonctionnalités.

La répartition du code

let user = {
  name : 'Chiranjit',
  address : {
    personal : {
      city: 'Kolkata',
      state: 'West Bengal'
    },
    office : {
      city: 'Bengaluru',
      state: 'Karnataka',
      area: {
        landmark:'Waterside',
        post: 433101
      }
    }
  }
}
var finalObj = {} 

const flatObjFn = (obj, parent) => {
  for(let key in obj){
    if(typeof obj[key] === 'object'){
      flatObjFn(obj[key], parent '_' key)
    }else{
      finalObj[parent   '_'   key] = obj[key]
    }
  }
}

flatObjFn(user, 'user');
console.log(finalObj);

Explication ligne par ligne

  1. Création de l'objet imbriqué :
    • Nous commençons par créer un objet profondément imbriqué nommé user. Il contient propriétés telles que le nom, l'adresse et d'autres objets imbriqués dans adresse.
  2. Initialisation de l'objet de sortie :

    • Un objet vide finalObj est créé pour stocker le résultat aplati.
  3. Définition de la fonction d'aplatissement :

    • Une fonction nommée flatObjFn est définie, acceptant deux paramètres : a) obj : l'objet à aplatir. b) parent : une chaîne pour préfixer les noms de propriétés pour plus de clarté.
  4. Itération via les propriétés de l'objet :

    • Une boucle for...in parcourt chaque propriété de l'objet d'entrée obj.
  5. Gestion des objets imbriqués :

    • Si la valeur d'une propriété est un objet, la fonction flatObjFn est appelé de manière récursive cet objet. Le paramètre parent est concaténé avec le nom de la propriété actuelle pour créer un nouveau préfixe pour les propriétés imbriquées.
  6. Gestion des valeurs primitives :

    • Si la valeur d'une propriété n'est pas un objet (c'est-à-dire une valeur primitive comme une chaîne ou un nombre), il est ajouté au finalObj avec une clé formé en concaténant le parent et le nom de la propriété actuelle.
  7. Appel de la fonction d'aplatissement :

    • Le flatObjFn est appelé avec l'objet utilisateur comme entrée et « utilisateur » comme le préfixe parent initial.
  8. Enregistrement de l'objet aplati :

    • L'objet aplati final est imprimé sur la console à l'aide de console.log(finalObj).

Comment ça marche ?
La fonction flatObjFn parcourt l'objet de manière récursive, décomposant les structures imbriquées en un objet plat. Le paramètre parent assure le suivi de la hiérarchie des objets, permettant à la fonction de créer des noms de propriétés significatifs dans l'objet de sortie.

Connectons-nous sur Twitter ou LinkedIn

Déclaration de sortie Cet article est reproduit à: https://dev.to/dey24/flattening-a-deeply-nesed-object-a-tep-by-tep-guide-163g?1 S'il y a une violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3