Destrukturyzacja

Składnia ES6 pozwala na przypisanie destrukturyzujące tablic oraz obiektów.

Przypisanie destrukturyzujące umożliwia przypisanie własności tablicy lub obiektu do zmiennych z wykorzystaniem składni przypominającej składnię tablic czy literałów obiektowych. Może być ona niezwykle zwięzła, a jednocześnie znacznie czytelniejsza od tradycyjnego kodu służącego do uzyskania dostępu do własności.

Tablica

W ES5 aby przypisać do zmiennych elementy tablicy należało zrobić trzema osobnymi przypisaniami.

Przykład 5.1
let numbers = [1, 2, 3];
let first  = numbers[0];
let second = numbers[1];
let third  = numbers[2];

Dzięki nowej składni możemy dokonać tego prościej.

Przykład 5.2
let [first, second, third] = [1, 2, 3];
console.log(first);  // -> 1
console.log(second); // -> 2
console.log(third);  // -> 3

Jeśli spróbujemy pobrać do zmiennej element tablicy, którego w niej nie ma zwrócona zostanie wartość undefined.

Przykład 5.3
let [first, second, third] = [1, 2];
console.log(first);  // -> 1
console.log(second); // -> 2
console.log(third);  // -> undefined

Możemy wykorzystać parametr resztowy aby pobrać do jednej zmiennej pozostałe elementy tablicy.

Przykład 5.4
let [first, ...other] = [1, 2, 3];
console.log(first); // -> 1
console.log(other); // -> [2, 3]

Ponadto możemy skorzystać również z parametrów domyślych.

Przykład 5.5
let [first=1, second=2, third=3] = [];
console.log(first);  // -> 1
console.log(second); // -> 2
console.log(third);  // -> 3

Możliwa jest również destrukturyzacja zagnieżdżonych tablic.

Przykład 5.6
let [first, [second, third, [fourth]]] = [1, [2, 3, [4]]];
console.log(first);  // -> 1
console.log(second); // -> 2
console.log(third);  // -> 3
console.log(fourth); // -> 4

Obiekt

Do czasu ES6 w przypadku obiektów również trzeba dokonać kilku przypisań aby wyciągnąć do zmiennych pola obkietu.

Przykład 5.7
let foo = { 
    bar: 'bar',
    baz: 'baz'
};

let barFromFoo = foo.bar;
let bazFromFoo = foo.baz;

console.log(barFromFoo); // -> 'bar'
console.log(bazFromFoo); // -> 'baz'

Składnia ES6 ponownie ułatwia nam pracę.

Przykład 5.8
let foo = { 
    bar: 'bar',
    baz: 'baz'
};

let { bar: barFromFoo, baz: bazFromFoo } = foo;

console.log(barFromFoo); // -> 'bar'
console.log(bazFromFoo); // -> 'baz'

Jeśli nazwa pola obiektu oraz zmiennej, do której chcemy przypisać jego wartość są takie same możemy użyć uproszczonej składni.

Przykład 5.9
let foo = { 
    bar: 'bar',
    baz: 'baz' 
};

let { bar, baz } = foo;

console.log(bar); // -> 'bar'
console.log(baz); // -> 'baz'

Podobnie jak w przypadku tablic, również podczas destrukturyzacji obiektów, przyspianie do zmiennej pola, którego nie ma w obiekcie, spowoduje zwrócenie wartości undefined.

Przykład 5.10
let { foo } = {}

console.log(foo); // -> undefined

Gdy destrukturyzujemy obiekt możemy wykorzystać parametry domyślne.

Przykład 5.11
let { foo = 'bar' } = {}

console.log(foo); // -> 'bar'

Szczególnie przydatne jest to podczas pisania funkcji, które przyjmują jako parametr obiekt i nie wymagają podawania wszystkich jego własności.

Przykład 5.12
function foo ({first, second, third}) {
  console.log(first, second, third);
}

function bar ({first=1, second=2, third=3}) {
  console.log(first, second, third);
}

foo({third: 4}); // -> undefined • undefined • 4

bar({third: 4}); // -> 1 • 2 • 4

Również w przypadku obiektów, możemy łączyć i zagnieżdżać wyrażenia destrukturyzujące.

Przykład 5.13
var complicatedFoo = {
    bar: [
        { baz: 'baz' } 
    ]
};

let { bar: [ {baz: foo } ]} = complicatedFoo;
console.log(foo); // -> 'baz'

Ćwiczenie

(5.1) Zaimplementuj metodę greet(), która przyjmuje jako parametr dwuelementową tablicę obiektów zawierających pola name oraz age i zwraca komunikat: First person is <name1> and <age1> years old. Second person is <name2> and <age2> years old.


Źródła

results matching ""

    No results matching ""