Destructuring / Spread
Destructuring
INFO
Destructuring wird in Deklarationen eingesetzt. Diese Zuweisung dient zum Verteilen von Elementen des Iterables bzw. Keys eines Objektes auf distinkte neue Variablen.
js
const zahlen = [1,2];
const [z1, z2] = zahlen;
const person = { fname: 'John', lname: 'Resig' };
const { fname, lname } = person;const zahlen = [1,2];
const [z1, z2] = zahlen;
const person = { fname: 'John', lname: 'Resig' };
const { fname, lname } = person;Array Destructuring
Deklaration von neuen Variablen
js
const numbers = [1,2,3,4];
const [n1, n2] = numbers;
const [first, , third, ...rest] = numbers;
const [z1, z2, z3, z4, z5 = 5] = numbers;const numbers = [1,2,3,4];
const [n1, n2] = numbers;
const [first, , third, ...rest] = numbers;
const [z1, z2, z3, z4, z5 = 5] = numbers;Getrennte Deklaration und Zuweisung
js
const languages = ['JavaScript', 'TypeScript'];
let js, ts;
[js, ts] = languages;const languages = ['JavaScript', 'TypeScript'];
let js, ts;
[js, ts] = languages;Swapping of Variables
js
let a = 17, b = 4;
[b, a] = [a, b];let a = 17, b = 4;
[b, a] = [a, b];Object Destructuring
Deklaration von neuen Variablen
js
const user = {
id: 17,
name: 'Brendan Eich'
};
const { id, name } = user;const user = {
id: 17,
name: 'Brendan Eich'
};
const { id, name } = user;Getrennte Deklaration und Zuweisung
js
let min, max;
({ min, max }) = { min: 1, max: 10 });let min, max;
({ min, max }) = { min: 1, max: 10 });Ändern des Variablennamens
js
const { firstname: vorname, lastname: nachname } = {
firstname: 'Axel',
lastname: 'Rauschmayer
};const { firstname: vorname, lastname: nachname } = {
firstname: 'Axel',
lastname: 'Rauschmayer
};Default Values
js
const { firstname: vorname, lastname: nachname, titel = 'Dr.' } = {
firstname: 'Axel',
lastname: 'Rauschmayer
};const { firstname: vorname, lastname: nachname, titel = 'Dr.' } = {
firstname: 'Axel',
lastname: 'Rauschmayer
};Funktions-Parameter entpacken
js
function printUser({ firstname, lastname }) {
console.log(`${firstname} ${lastname}`);
}
function printLine({ length, extra: { character: char }}) {
console.log(char.repeat(length));
}
const usr = { firstname: 'Eric', lastname: 'Meyer' };
printUser(usr);
const options = { length: 80, extra: { character: '*', ending: 'LF' }};
printLine(options);function printUser({ firstname, lastname }) {
console.log(`${firstname} ${lastname}`);
}
function printLine({ length, extra: { character: char }}) {
console.log(char.repeat(length));
}
const usr = { firstname: 'Eric', lastname: 'Meyer' };
printUser(usr);
const options = { length: 80, extra: { character: '*', ending: 'LF' }};
printLine(options);Default Argumente
js
function drawChart({size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}) {
console.log(size, coords, radius);
// do some chart drawing
}function drawChart({size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}) {
console.log(size, coords, radius);
// do some chart drawing
}Spread
INFO
Die Spread-Syntax ist ein bequemer Weg zur Verarbeitung von Arrays (bzw. Iterables im Allgemeinen) und Objekten.
Der Spread auf ein Iterable angewendet, expandiert die Elemente zu einer Liste von Elementen in Ausdrücken, die eben eine Liste erwarten.
Ein praktisches Beispiel:
js
function sum(a, b, c) {
return a+b+c;
}
const zahlen = [1, 2, 3];
console.log(sum(zahlen[0], zahlen[1], zahlen[2]));
console.log(sum.apply(null, numbers));
console.log(sum(...zahlen));function sum(a, b, c) {
return a+b+c;
}
const zahlen = [1, 2, 3];
console.log(sum(zahlen[0], zahlen[1], zahlen[2]));
console.log(sum.apply(null, numbers));
console.log(sum(...zahlen));Array Spread
Für Funktionsaufrufe:
js
anyFunction(17, 4, ...iterable);anyFunction(17, 4, ...iterable);Für Array-Kopien bzw. Zusammenführungen:
js
const destination = ['First', ...iterable, 'Last'];const destination = ['First', ...iterable, 'Last'];Object Spread
Seit JavaScript 2018 kann der Spread-Operator auch auf Objekte angewendet werden. Jetzt wird über die Properties eines Objektes iteriert.
js
const obj = { a: 17, b: 4};
const objClone = { ...obj };
const defaults = obj;
const derivedObj = { ...defaults, b: 24, c: 42};const obj = { a: 17, b: 4};
const objClone = { ...obj };
const defaults = obj;
const derivedObj = { ...defaults, b: 24, c: 42};
JavaScript Docs