Destructuring en JavaScript : Objets et Tableaux

Extraire des valeurs en une ligne — syntaxe, valeurs par défaut, renommage, rest et cas d'usage

9
Sections
25+
Exemples
ES6+
Standard

SECTION 01

Le principe

📦 Extraire des valeurs en une ligne

Le destructuring (ES6) permet d'extraire des propriétés d'un objet ou des éléments d'un tableau directement dans des variables, sans passer par des lignes intermédiaires.

// ❌ Sans destructuring
const user = ;
const nom = user.nom;
const age = user.age;
const ville = user.ville;

// ✅ Avec destructuring — même résultat
const = user;

SECTION 02

Destructuring d'objets

🔓 Syntaxe de base
const user = ;

// Extraire certaines propriétés
const = user;
console.log(nom); // « Alice »
console.log(age); // 25

// Renommer les variables
const = user;
console.log(username); // « Alice »
console.log(userAge); // 25

🪆 Destructuring imbriqué
const response = ;

// Extraire en profondeur
const = response;
console.log(nom); // « Alice »
console.log(ville); // « Paris »

Le destructuring imbriqué profond peut vite devenir illisible. Au-delà de 2 niveaux, envisage d'extraire par étapes ou d'utiliser l'optional chaining : response?.data?.user?.nom.

SECTION 03

Destructuring de tableaux

const colors = [« rouge », « vert », « bleu »];

// Extraire par position
const [first, second, third] = colors;
console.log(first); // « rouge »
console.log(third); // « bleu »

// Ignorer des éléments avec des virgules
const [, , last] = colors;
console.log(last); // « bleu »

// Swap de variables (sans variable temporaire)
let a = 1, b = 2;[a, b] = [b, a];
console.log(a, b); // 2, 1

// Retour multiple d'une fonction (comme useState en React)
function getMinMax(arr)
const [min, max] = getMinMax([3, 1, 7, 2]);
// min = 1, max = 7

La différence clé : le destructuring d'objet utilise les noms de propriétés (). Le destructuring de tableau utilise la position ([first, second]). Tu peux nommer les variables comme tu veux avec les tableaux.

SECTION 04

Valeurs par défaut

Si la propriété n'existe pas ou vaut undefined, la valeur par défaut est utilisée :

// Objets
const = ;
console.log(role); // « user » (valeur par défaut)

// Renommage + valeur par défaut
const = ;

// Tableaux
const [a = 0, b = 0, c = 0] = [10, 20];
console.log(a, b, c); // 10, 20, 0

// ⚠️ La valeur par défaut ne s'applique que pour undefined, PAS null
const = ;
console.log(x); // null (pas 5 !)

// Pour gérer null aussi, utilise ??
const = ;
const x = rawX ?? 5; // 5

SECTION 05

Le rest operator (…)

📥 Collecter le reste
// Objets — extraire certaines propriétés, garder le reste
const user = ;
const = user;
console.log(nom); // « Alice »
console.log(rest); //

// Tableaux — extraire le début, garder le reste
const [first, second, …others] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(others); // [3, 4, 5]

// Pattern courant : retirer une propriété d'un objet
const = user;
// safeUser = — sans motDePasse

// Rest dans les paramètres de fonction
function sum(…numbers)
sum(1, 2, 3); // 6

…rest doit toujours être le dernier élément du destructuring. Il collecte tout ce qui n'a pas été explicitement extrait.

SECTION 06

Destructuring dans les paramètres

⚡ Paramètres nommés

Le destructuring dans les paramètres évite de passer un objet et d'accéder manuellement aux propriétés :

// ❌ Sans destructuring
function createUser(options)

// ✅ Avec destructuring dans les paramètres
function createUser()
createUser();
// « Alice » 25 « user »

// Arrow function avec destructuring
const getFullName = () => `$ $`;

// Dans un callback
const users = [
,
,
];
const noms = users.map(() => nom);
// [« Alice », « Bob »]

const majeurs = users.filter(() => age >= 18);

🛡️ Paramètre par défaut =
// Si la fonction peut être appelée sans argument
function createUser( = )

createUser(); // « Anonyme » « user » — pas de crash
createUser(); // « Alice » « user »

Sans le = par défaut, appeler createUser() sans argument provoquerait une erreur car JavaScript essaierait de destructurer undefined.

SECTION 07

Patterns courants

🌐 API response
// Destructurer la réponse d'une API
const response = await fetch(« /api/users »);
const = await response.json();

// Promise.allSettled
const results = await Promise.allSettled([fetchA(), fetchB()]);
for (const of results)

⚛️ React (useState, props)
// useState — destructuring de tableau
const [count, setCount] = useState(0);
const [isOpen, setIsOpen] = useState(false);

// Props — destructuring d'objet
function UserCard() {
return <div> ({age})</div>;
}

📋 Import / Export
// Import nommé = destructuring du module
import from « react »;
import from « fs/promises »;

// for…of + entries (destructuring dans la boucle)
for (const [index, item] of items.entries())

// Object.entries
for (const [key, val] of Object.entries(config))

SECTION 08

Erreurs fréquentes

ErreurProblèmeSolution
Destructurer undefined ou nullTypeError: Cannot destructureAjouter = ou vérifier avant
Confondre et []Mauvais type de destructuring pour objets, [] pour tableaux
Oublier le renommageConflit de nom de variable
Destructuring trop imbriquéCode illisibleMax 2 niveaux, extraire par étapes
Valeur par défaut ignorée avec nullnull n'est pas undefinedUtiliser ?? après le destructuring

SECTION 09

Questions fréquentes

Quelle différence entre le spread (…) et le rest (…) ?
C'est le même opérateur mais dans deux contextes différents. Le rest collecte des éléments dans un tableau/objet (côté gauche : const = obj). Le spread étale un tableau/objet (côté droit : […arr1, …arr2] ou ).
Le destructuring copie-t-il les valeurs ?
Pour les primitifs (string, number, boolean), oui. Pour les objets et tableaux, non — la variable pointe vers la même référence. Modifier l'objet extrait modifie aussi l'original. Pour une copie, utilise le spread : const = user; const copy = .
Peut-on destructurer dans une boucle for…of ?
Oui, c'est un pattern très courant : for (const of users) pour les objets ou for (const [key, val] of Object.entries(obj)) pour les paires clé-valeur.
Le destructuring est-il obligatoire en JavaScript moderne ?
Non, mais il est omniprésent. React l'utilise pour useState, les props et les hooks. Les imports ES modules l'utilisent. Les API retournent des objets qu'on destructure. C'est une syntaxe fondamentale du JS moderne que tout développeur doit maîtriser.

Destructuring en JavaScript — Objets et tableaux

Référence : MDN Destructuring