Skip to content

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};