Η ανάθεση αποδόμησης πίνακα είναι ένας συνοπτικός τρόπος εξαγωγής τιμών από έναν πίνακα. Η σύνταξή της είναι παρόμοια με μια έκφραση κυριολεκτικού πίνακα, αλλά στην αριστερή πλευρά της ανάθεσης αντί για τη δεξιά.
const frenchNumbers = ['quatre-vingts', 'quatre-vingt-dix', 'cent'];
const [french80, french90, french100] = frenchNumbers;
french80;
// => 'quatre-vingts'
french90;
// => 'quatre-vingt-dix'
french100;
// => 'cent'
Επειδή οι μεταβλητές αντιστοιχίζονται σε τιμές του πίνακα με βάση τη θέση, η σύνταξη αποδόμησης μπορεί να χρησιμοποιηθεί για την ανάθεση ή την εκ νέου ανάθεση πολλών μεταβλητών σε μία μόνο έκφραση.
let [a, b] = ['world', 'hello'];
[b, a] = [a, b];
a;
// => 'hello'
b;
// => 'world'
Αυτό λειτουργεί και για εμφωλευμένους πίνακες.
let [a, b, c] = ['orange', 'purple', 'green'];
[[a, b], c] = [[c, a], b];
a;
// => 'green'
b;
// => 'orange'
c;
// => 'purple'
Η σύνταξη επιτρέπει την παράλειψη τιμών κατά την αντιστοίχιση, για παράδειγμα για να αγνοήσεις συγκεκριμένες θέσεις στον πίνακα.
Στο παρακάτω παράδειγμα, φαντάσου ότι έχουμε μια συνάρτηση getUserInfo που επιστρέφει έναν πίνακα που περιέχει το όνομα, το επώνυμο και τη διεύθυνση ενός χρήστη.
getUserInfo();
// => ["Valerie", "Noir", "Sunny Lane 523"]
const [, , streetAddress] = getUserInfo();
streetAddress;
// => "Sunny Lane 523"
Επίσης, η ανάθεση δεν απαιτείται να χρησιμοποιεί όλες τις τιμές.
const [firstName, lastName] = getUserInfo();
firstName;
// => "Valerie"
lastName;
// => "Noir"
Είναι ακόμη δυνατό να εξαγάγεις περισσότερες τιμές από όσες περιέχει ο πίνακας· στις υπόλοιπες μεταβλητές θα ανατεθεί η τιμή undefined. Αυτό μπορεί να φανεί χρήσιμο όταν ο αριθμός των τιμών δεν είναι γνωστός εκ των προτέρων.
const pickAtLeastOne = ['first choice', 'second choice'];
const [first, second, third, fourth] = pickAtLeastOne;
first;
// => "first choice"
second;
// => "second choice"
third;
// => undefined
fourth;
// => undefined
Η ανάθεση αποδόμησης πίνακα μπορεί να παρέχει προεπιλεγμένες τιμές σε περίπτωση που δεν υπάρχει καμία στον πίνακα προέλευσης.
const [first, second, third = 'none selected', fourth] = pickAtLeastOne;
third;
// => 'none selected'
fourth;
// => undefined