JavaScript Affectation de déstructuration

Object et Array sont les deux structures de données les plus couramment utilisées en JavaScript.

Avec l'aide des objets, vous pouvez créer une entité stockant des éléments de données par clé. Avec l'aide des tableaux, vous pouvez assembler des éléments de données en une collection ordonnée.

En cas de passage de ceux-ci à une fonction, il se peut qu'elle ait besoin non pas d'un objet ou d'un tableau dans son ensemble, mais de quelques éléments individuels.

Les expressions littérales de l'objet et du tableau permettent de créer des packages ad hoc. Voici la syntaxe:

const x = [1, 2, 3, 4, 5];

L'affectation de déstructuration est une syntaxe unique qui aide à "décomposer" les objets ou les tableaux en un groupe de variables. La déstructuration peut également fonctionner efficacement avec des fonctions complexes, des valeurs par défaut, et plus encore.

L'affectation de déstructuration utilise la syntaxe suivante:

Javascript arrays destructuring
const x = [1, 2, 3, 4, 5]; const [y, z] = x; console.log(y); // 1 console.log(z); // 2

Vous pouvez trouver des fonctionnalités similaires dans d'autres langages. Par exemple, en Python ou Perl.

Maintenant, examinons un exemple de déstructuration de tableau en variables:

Javascript arrays destructuring
// we have an array with the name and surname let arr = ["John", "Doe"]; // destructuring assignment // sets firstname = arr[0] // and surname = arr[1] let [firstname, surname] = arr; console.log(firstname); // John console.log(surname); // Doe

En conséquence, il est possible de travailler avec des variables au lieu de membres de tableau.

cela fonctionnera encore mieux si vous le combinez avec split ou d'autres méthodes de retour de tableau:

let [firstName, surname] = "John Doe".split(' ');

Notez que la déstructuration n'est pas la même chose que "destructive".

Nous l'appelons déstructuration car elle "déstructurise" par le biais de la méthode de copie d'éléments dans des variables.

Voici une façon plus courte d'écrire:

// let [firstName, surname] = arr;
let firstName = arr[0];
let surname = arr[1];

Prenez en considération que vous pouvez jeter les éléments indésirables en utilisant une virgule supplémentaire, comme ceci:

Javascript arrays destructuring
// second element is not needed let [name, age , profession] = ["David", "23", "programmer"]; console.log(profession); // programmer

Il peut fonctionner avec n'importe quel itérable sur le côté droit:

let [a, b, c] = "abc"; // ["a", "b", "c"]
let [one, two, three] = new Set([1, 2, 3]);

De plus, vous pouvez utiliser n'importe quels éléments assignables du côté gauche.

Par exemple, la propriété d'un objet:

Javascript arrays destructuring
let user = {}; [user.name, user.surname] = "John Doe".split(' '); console.log(user.name); // John

Une autre chose utile est qu'il est possible d'utiliser la méthode Object.entries(obj) avec la déstructuration pour boucler sur les clés et les valeurs d'un objet.

Voici un exemple:

Javascript object entries method with destructuring
let user = { name: "Maria", age: 25 }; // loop over keys-and-values for (let [key, value] of Object.entries(user)) { console.log(`${key}:${value}`); // name:Maria, then age:25 }

Le reste ‘…’

Au cas où il est nécessaire d'obtenir non seulement les premières valeurs mais aussi d'assembler toutes les suivantes, vous avez la possibilité d'ajouter un autre paramètre pour obtenir "le reste" en utilisant simplement trois points "...”, comme ceci:

Javascript arrays rest
let [name1, name2, ...rest] = ["John", "Doe", "doctor", "surgeon"]; console.log(name1); // John console.log(name2); // Doe // Note that type of `rest` is Array. console.log(rest[0]); // doctor console.log(rest[1]); // surgeon console.log(rest.length); // 2

Des valeurs par défaut

En cas de valeurs moins nombreuses dans le tableau que de variables dans l'affectation, aucune erreur ne se produira. Les valeurs qui sont absentes seront considérées comme indéfinies:

Javascript arrays rest
let [firstName, surname] = []; console.log(firstName); // undefined console.log(surname); // undefined

Si vous voulez une valeur par défaut pour remplacer celle qui manque, utilisez le signe =, comme suit:

Javascript arrays rest
// default values let [name = "David", surname = "Smith"] = ["Peter"]; console.log(name); // Peter (from array) console.log(surname); // Smith (default used)

Destructurer un objet

Vous pouvez utiliser l'affectation de déstructuration avec des objets, également, en utilisant la syntaxe de base suivante:

let {  var1,  var2} = {  var1: …,  var2: …}

Sur le côté droit, il y a un objet existant qu'il faut diviser en variables. Sur le côté gauche, il y a un motif pour faire correspondre les propriétés. Le signe des trois points {...} inclut un groupe de noms de variables.

Voici un exemple:

Javascript arrays destructuring an object
let options = { title: "Car", model: "BMW M5", year: 2020 }; let { title, model, year } = options; console.log(title); // Car console.log(model); // BMW M5 console.log(year); // 2020

Les propriétés options.title, options.width et options.height sont attribuées à des variables correspondantes. L'agencement n'a pas d'importance. Cette option fonctionnera également:

// changed the order in let {...}
let {
  year,
  model,
  title
} = {
  title: "Car",
  model: "BMW M5",
  year: 2020
}

Pour attribuer une propriété à une variable avec un nom différent, alors vous pouvez agir ainsi:

Javascript arrays destructuring an object
let options = { title: "Car", model: "BMW M5", year: 2020 }; // { sourceProperty: targetVariable } let { model: m, year: y, title } = options; // width -> m // height -> y // title -> title console.log(title); // Car console.log(m); // BMW M5 console.log(y); // 2020

Pour les propriétés possiblement manquantes, vous avez la possibilité de définir des valeurs par défaut en utilisant le signe de "=", comme suit:

Javascript arrays destructuring an object
let options = { title: "Car" }; let { model = "BMW M5", year = 2020, title } = options; console.log(title); // Car console.log(model); // BMW M5 console.log(year); // 2020

Les valeurs par défaut peuvent être n'importe quelles expressions ou appels de fonction.

En cas de présence d'un objet complexe avec une gamme de propriétés, vous pouvez choisir d'extraire ce dont vous avez besoin, comme suit:

Javascript arrays destructuring an object
let options = { title: "Car", model: "BMW M5", year: 2020 }; // only extract title as a variable let { title } = options; console.log(title); // Car

Le modèle Rest “…”

Un autre scénario peut également se produire: la quantité de propriétés de l'objet est supérieure à celle des variables que vous possédez. Dans de tels cas, vous pouvez utiliser le modèle rest. Mais, notez qu'il ne fonctionne que sur les navigateurs modernes.

Voici l'exemple:

Javascript arrays destructuring an object
let options = { title: "Book", page: 200, species : "scientific" }; // title = property named title // rest = object with the rest of properties let { title, ...rest } = options; // now title="Book", rest={page: 200, species: scientific} console.log(rest.page); // 200 console.log(rest.species); // scientific

Destructuration imbriquée

Imaginez qu'un tableau ou un objet contient d'autres tableaux ou objets imbriqués. Des motifs côté gauche plus complexes peuvent être utilisés pour extraire des portions plus profondes.

Dans l'exemple ci-dessous, options contient un autre objet dans la propriété views et un tableau dans la propriété items :

Javascript arrays nested destructuring an object
let options = { views: { model: "sport", year: 2020 }, items: ["Car", "Bike"], extra: true }; // destructuring assignment split in multiple lines for clarity let { views: { // put size here model, year }, items: [item1, item2], // assign items here title = "Car&Bike" // not present in the object (default value is used) } = options; console.log(title); // Car&Bike console.log(model); // sport console.log(year); // 2020 console.log(item1); // Car console.log(item2); // Bike

Il est important de savoir que toutes les propriétés de l'objet options sauf extra (il est absent du côté gauche), sont attribuées à des variables correspondantes.

Ainsi, les model, year, item1, item2, et title sont de la même valeur. Mais, il n'existe pas de variables pour views et items.

Les paramètres de Smart Function

Parfois, une fonction a de nombreux paramètres, et la plupart d'entre eux sont facultatifs. Mais, voyons qu'une fonction crée un menu. Elle aura une hauteur, une largeur, une liste d'articles, un titre, et plus encore.

Nous ne vous recommandons pas d'écrire la fonction, comme ceci:

function showBook(title = "Javascript", page = 200,  species : "programming"
, items = []) {
  // ...
}

Le principal problème est de se souvenir de l'ordre des arguments. Un autre problème est de trouver un moyen d'appeler une fonction lorsque la majorité des paramètres sont bons par défaut.

L'action la plus facultative est de passer des paramètres sous forme d'objet. La fonction les déstructurisera en variables d'un seul coup, comme ceci:

Javascript arrays
// we pass object to function let options = { title: "Js book", items: ["Item1", "Item2"] }; function showBook({ title = "Javascript", pages = 200, species = "programming", items = [] }) { // title, items – taken from options, // pages, species – defaults used console.log(`${title} ${species} ${pages}`); // Javascript programming 200 console.log(items); // Item1, Item2 } showBook(options);

Il existe un autre moyen plus complexe de déstructuration, comprenant des objets imbriqués et des mappages de colonnes.

Par exemple:

Javascript arrays
let options = { title: "Js book" }; function showBook({ title = "Javascript", p = 200, //pages goes to p s = "programming", // species goes to s }) { console.log(`${title} ${s} ${p}`); // Javascript programming 200 } showBook(options);

La syntaxe complète ressemblera à ceci:

function ({
  incomingProperty: varName = defaultValue
    ...
})

Comme vous pouvez le voir, c'est la même chose que pour une affectation de déstructuration.

Ensuite, pour l'objet des paramètres, il y aura une variable varName pour incomingProperty.

Une déstructuration comme celle-ci considère que showBook() n'a pas d'argument. Au cas où vous voulez toutes les valeurs par défaut, alors spécifiez un objet vide, comme ceci:

showBook({}); // ok, all values are default
showBook(); // this would give an error

Il est possible de corriger cela en définissant {} comme valeur par défaut pour l'objet des paramètres.

Par exemple:

Javascript arrays
function showBook({ title = "Book", species = "programming", pages = 200 } = {}) { console.log(`${title} ${species} ${pages}`); } showBook(); // Book programming 200

Heure du Quiz : Testez Vos Compétences!

Prêt à relever le défi de ce que vous avez appris ? Plongez dans nos quiz interactifs pour approfondir votre compréhension et renforcer vos connaissances de manière ludique.

Trouvez-vous cela utile?