Zoeken…


Invoering

Destructurering is een patroonvergelijkingstechniek die recent is toegevoegd aan Javascript in EcmaScript 6.

Hiermee kunt u een groep variabelen binden aan een overeenkomstige set waarden wanneer hun patroon overeenkomt met de rechterkant en de linkerkant van de uitdrukking.

Syntaxis

  • let [x, y] = [1, 2]
  • let [first, ... rest] = [1, 2, 3, 4]
  • let [one,, three] = [1, 2, 3]
  • let [val = 'default value'] = []
  • let {a, b} = {a: x, b: y}
  • let {a: {c}} = {a: {c: 'genest'}, b: y}
  • let {b = 'standaardwaarde'} = {a: 0}

Opmerkingen

Destructurering is nieuw in de ECMAScript 6 (AKA ES2015) -specificatie en browserondersteuning kan beperkt zijn. De volgende tabel geeft een overzicht van de vroegste versie van browsers die> 75% van de specificatie ondersteunden.

Chrome Rand Firefox Internet Explorer Opera Safari
49 13 45 X 36 X

(Laatst bijgewerkt - 2016/08/18)

Destructureringsfunctieargumenten

Trek eigenschappen van een object doorgegeven aan een functie. Dit patroon simuleert benoemde parameters in plaats van te vertrouwen op argumentpositie.

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

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

greeting(user)

Dit werkt ook voor arrays:

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

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

Variabelen hernoemen tijdens destructurering

Met destructurering kunnen we naar één sleutel in een object verwijzen, maar deze als een variabele met een andere naam declareren. De syntaxis ziet eruit als de sleutel / waarde-syntaxis voor een normaal JavaScript-object.

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

Arrays vernietigen

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

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

We kunnen de standaardwaarde in de destructureringsmatrix instellen, zie het voorbeeld van standaardwaarde tijdens destructurering .

Met de destructureringsmatrix kunnen we de waarden van 2 variabelen gemakkelijk omwisselen:

var a = 1;
var b = 3;

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

We kunnen lege slots opgeven om onnodige waarden over te slaan:

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

Objecten vernietigen

Destructurering is een handige manier om eigenschappen uit objecten in variabelen te extraheren.

Basissyntaxis:

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

let { name, age } = person;

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

Destructurering en hernoemen:

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

let { name: firstName } = person;

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

Destructurering met standaardwaarden:

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'

Destructurering en hernoemen met standaardwaarden

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'

Destructurering binnen variabelen

Afgezien van het vernietigen van objecten in functieargumenten, kunt u ze als volgt in variabele declaraties gebruiken:

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."

Zoals u kunt zien, zijn er drie nieuwe variabelen gemaakt: name , age en location en hun waarden zijn bij de objectpersoon person als deze overeenkomen met sleutelnamen.

Restparameters gebruiken om een array met argumenten te maken

Als je ooit een array nodig hebt die bestaat uit extra argumenten die je misschien wel of niet verwacht te hebben, afgezien van de argumenten die je specifiek hebt opgegeven, kun je de parameter array rest in de argumentdeclaratie als volgt gebruiken:

Voorbeeld 1, optionele argumenten in een array:

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

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

Voorbeeld 2, alle argumenten zijn nu een array:

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

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

De console wordt waar afgedrukt omdat myArguments een array is, en de ...myArguments in de parameterargumentenverklaring converteert een lijst met waarden die zijn verkregen door de functie (parameters) gescheiden door komma's naar een volledig functionele array (en niet een arrayachtig object) zoals het native argumentenobject).

Standaardwaarde tijdens destructurering

We komen vaak een situatie voor waarbij een eigenschap die we proberen te extraheren niet bestaat in het object / de array, wat resulteert in een TypeError (terwijl geneste objecten worden vernietigd) of wordt ingesteld op undefined . Tijdens het destructeren kunnen we een standaardwaarde instellen, waarop deze zal terugvallen als deze niet in het object wordt gevonden.

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

Geneste destructurering

We zijn niet beperkt tot het vernietigen van een object / array, we kunnen een genest object / array vernietigen.

Genestelde objectvernietiging

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

Geneste array-destructurering

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

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

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

Destructurering is niet alleen beperkt tot een enkel patroon, we kunnen er arrays in hebben, met n-niveaus van nesten. Evenzo kunnen we arrays vernietigen met objecten en vice versa.

Arrays in object

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

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

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

Objecten binnen arrays

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow