Menu
Coddy logo textTech

Copie superficielle et profonde

Fait partie de la section Logique & Flux du Journey JavaScript de Coddy. Leçon 25 sur 65.

Lors de la copie d’objets, nous avons deux types de copies :

  1. Copie superficielle - copie uniquement le premier niveau
  2. Copie profonde - copie tous les niveaux imbriqués

Méthodes de copie superficielle :

Utilisation de l’opérateur de décomposition :

const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };

Utilisation de Object.assign(), qui crée un nouvel objet en copiant les propriétés de l’objet source vers l’objet cible :

const assignCopy = Object.assign({}, original);

Problème avec la copie superficielle :

original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (les objets imbriqués partagent la référence)

console.log(assignCopy.b.x); // 3

Comprendre les méthodes JSON et la copie profonde

JSON.stringify() convertit un objet JavaScript en chaîne JSON :

const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"

JSON.parse() convertit une chaîne JSON en objet JavaScript :

const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }

Copie profonde à l’aide de JSON :

const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

original.b.x = 3;
console.log(deepCopy.b.x); // 2 (complètement indépendant)
challenge icon

Défi

Facile

Créez une fonction nommée processCart qui prend une chaîne JSON représentant un panier d’achat. Le panier contient un tableau de produits avec leurs noms et leurs prix. Votre tâche consiste à :

  1. Analyser la chaîne JSON pour la transformer en objet JavaScript
  2. Créer DEUX paniers distincts à partir de celui-ci
  3. Dans le deuxième panier :
    1. Ajouter une propriété discounted à chaque élément, définie sur false
    2. Appliquer une remise de 10 % à tous les éléments dont le price est supérieur à 50
    3. Définir 'discounted' sur true pour les éléments ayant bénéficié de la remise
  4. Renvoyer un tableau contenant les deux paniers

Essayez vous-même

function processCart(jsonString) {
    // Écrivez le code ici
}
// N'écrivez rien en dehors de la fonction
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur JavaScript en ligne