Recherche…


Introduction

La destruction est une technique de correspondance de modèle qui a été ajoutée récemment à Javascript dans EcmaScript 6.

Il vous permet de lier un groupe de variables à un ensemble de valeurs correspondant lorsque leur motif correspond au côté droit et au côté gauche de l'expression.

Syntaxe

  • let [x, y] = [1, 2]
  • let [first, ... rest] = [1, 2, 3, 4]
  • laissez [un, trois] = [1, 2, 3]
  • let [val = 'valeur par défaut'] = []
  • Soit {a, b} = {a: x, b: y}
  • Soit {a: {c}} = {a: {c: 'imbriqué'}, b: y}
  • let {b = 'valeur par défaut'} = {a: 0}

Remarques

La destruction est nouvelle dans la spécification ECMAScript 6 (AKA ES2015) et la prise en charge du navigateur peut être limitée. Le tableau suivant donne un aperçu de la première version des navigateurs prenant en charge> 75% de la spécification.

Chrome Bord Firefox Internet Explorer Opéra Safari
49 13 45 X 36 X

(Dernière mise à jour - 2016/08/18)

Destruction des arguments de la fonction

Tirez les propriétés d'un objet passé dans une fonction. Ce modèle simule des paramètres nommés au lieu de compter sur la position de l'argument.

let user = {
    name: 'Jill',
    age: 33,
    profession: 'Pilot'
}    

function greeting ({name, profession}) {
    console.log(`Hello, ${name} the ${profession}`)
}

greeting(user)

Cela fonctionne également pour les tableaux:

let parts = ["Hello", "World!"];

function greeting([first, second]) {
    console.log(`${first} ${second}`);
}

Renommer les variables lors de la destruction

La destruction nous permet de faire référence à une clé dans un objet, mais de la déclarer comme une variable avec un nom différent. La syntaxe ressemble à la syntaxe clé-valeur d'un objet JavaScript normal.

let user = {
  name: 'John Smith',
  id: 10,
  email: '[email protected]',
};

let {user: userName, id: userId} = user;

console.log(userName) // John Smith
console.log(userId) // 10

Tableaux de destruction

const myArr = ['one', 'two', 'three']
const [ a, b, c ] = myArr

// a = 'one', b = 'two, c = 'three'

Nous pouvons définir la valeur par défaut dans le tableau de déstructuration, voir l'exemple de la valeur par défaut lors de la destruction .

Avec le tableau de déstructuration, nous pouvons échanger facilement les valeurs de 2 variables:

var a = 1;
var b = 3;

[a, b] = [b, a];
// a = 3, b = 1

Nous pouvons spécifier des emplacements vides pour ignorer les valeurs inutiles:

[a, , b] = [1, 2, 3] // a = 1, b = 3

Objets de destruction

La destruction est un moyen pratique d'extraire des propriétés d'objets dans des variables.

Syntaxe de base:

let person = {
  name: 'Bob',
  age: 25
};

let { name, age } = person;

// Is equivalent to
let name = person.name; // 'Bob'
let age = person.age;   // 25

Destructuration et renommage:

let person = {
  name: 'Bob',
  age: 25
};

let { name: firstName } = person;

// Is equivalent to
let firstName = person.name; // 'Bob'

Destructuration avec les valeurs par défaut:

let person = {
  name: 'Bob',
  age: 25
};

let { phone = '123-456-789' } = person;

// Is equivalent to
let phone = person.hasOwnProperty('phone') ? person.phone : '123-456-789'; // '123-456-789'

Destructuration et renommage avec des valeurs par défaut

let person = {
  name: 'Bob',
  age: 25
};

let { phone: p = '123-456-789' } = person;

// Is equivalent to
let p = person.hasOwnProperty('phone') ? person.phone : '123-456-789'; // '123-456-789'

Destructuration des variables internes

Outre la déstructuration des objets en arguments de fonction, vous pouvez les utiliser dans les déclarations de variables comme suit:

const person = {
  name: 'John Doe',
  age: 45,
  location: 'Paris, France',
};

let { name, age, location } = person;

console.log('I am ' + name + ', aged ' + age + ' and living in ' + location + '.');
// -> "I am John Doe aged 45 and living in Paris, France."

Comme vous pouvez le voir, trois nouvelles variables ont été créées: le name , l' age et l' location et leurs valeurs ont été saisies par la person objet si elles correspondaient à des noms de clés.

Utilisation des paramètres de repos pour créer un tableau d'arguments

Si vous avez déjà besoin d'un tableau contenant des arguments supplémentaires que vous pouvez ou non vous attendre à obtenir, à l'exception de ceux que vous avez spécifiquement déclarés, vous pouvez utiliser le paramètre tableau rest dans la déclaration d'arguments comme suit:

Exemple 1, arguments optionnels dans un tableau:

function printArgs(arg1, arg2, ...theRest) {
  console.log(arg1, arg2, theRest);
}

printArgs(1, 2, 'optional', 4, 5);
// -> "1, 2, ['optional', 4, 5]"

Exemple 2, tous les arguments sont un tableau maintenant:

function printArgs(...myArguments) {
  console.log(myArguments, Array.isArray(myArguments));
}

printArgs(1, 2, 'Arg #3');
// -> "[1, 2, 'Arg #3'] true"

La console a été imprimée vraie parce que myArguments est un tableau, aussi, le ...myArguments dans la déclaration d'arguments de paramètres convertit une liste de valeurs obtenues par la fonction (paramètres) séparées par des virgules dans un tableau entièrement fonctionnel (et non un objet Array-like) comme l'objet argument natif).

Valeur par défaut lors de la destruction

Nous rencontrons souvent une situation où une propriété que nous essayons d'extraire n'existe pas dans l'objet / tableau, ce qui entraîne une TypeError (lors de la déstructuration des objets imbriqués) ou est définie sur undefined . En cas de déstructuration, nous pouvons définir une valeur par défaut, à laquelle il sera replacé, au cas où il ne serait pas trouvé dans l'objet.

var obj = {a : 1};
var {a : x , b : x1 = 10} = obj;
console.log(x, x1); // 1, 10
 
var arr = [];
var [a = 5, b = 10, c] = arr;
console.log(a, b, c); // 5, 10, undefined

Destruction imbriquée

Nous ne sommes pas limités à la déstructuration d'un objet / tableau, nous pouvons déstructurer un objet / tableau imbriqué.

Destructuration d'objets imbriqués

var obj = {
  a: {
    c: 1,
    d: 3
  },
  b: 2
};

var {
  a: {
    c: x,
    d: y
  },
  b: z
} = obj;

console.log(x, y, z);     // 1,3,2

Destructuration de tableaux imbriqués

var arr = [1, 2, [3, 4], 5];

var [a, , [b, c], d] = arr;

console.log(a, b, c, d);      // 1 3 4 5

La destruction ne se limite pas à un seul motif, nous pouvons y inclure des tableaux avec des niveaux d’imbrication n. De même, nous pouvons déstructurer des tableaux avec des objets et vice-versa.

Tableaux dans l'objet

var obj = {
  a: 1,
  b: [2, 3]
};

var {
  a: x1,
  b: [x2, x3]
} = obj;

console.log(x1, x2, x3);    // 1 2 3

Objets dans des tableaux

var arr = [1, 2 , {a : 3}, 4];

var [x1, x2 , {a : x3}, x4] = arr;

console.log(x1, x2, x3, x4);


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow