Деструктуризація - короткий запис, щоб витягти значення з об'єкта чи масиву в окремі змінні.
Об'єкти - за назвами властивостей:
const user = { id: 7, name: 'Оля', city: 'Львів', role: 'admin' };
const { name, city } = user; // name = 'Оля', city = 'Львів'
const { name: userName } = user; // перейменування
const { phone = 'не вказано' } = user; // значення за замовчуванням
const { id, ...profile } = user; // решта властивостей в об'єкт
Масиви - за позицією:
const [first, second] = ['php', 'laravel', 'vue'];
const [, , third] = ['php', 'laravel', 'vue']; // пропуск елементів
const [head, ...tail] = [1, 2, 3, 4]; // tail = [2, 3, 4]
let a = 1, b = 2;
[a, b] = [b, a]; // обмін значеннями
Вкладена деструктуризація:
const { address: { city } } = order; // city з order.address
Якщо order.address - undefined, буде TypeError. Захист - значення за замовчуванням: const { address: { city } = {} } = order;.
Де це використовується найчастіше:
- параметри функцій - іменовані опції:
function createUser({ name, email, role = 'user' }) { /* ... */ }
createUser({ email: 'a@b.ua', name: 'Оля' });
- імпорти:
import { ref, computed } from 'vue'- схожий синтаксис; - результат функції з кількома значеннями:
const [count, setCount] = useState(0)у React,const { data, error } = await request(); - перебір пар:
for (const [key, value] of Object.entries(prices)); - відповідь API:
const { data, meta: { total } } = await response.json();.
Що варто знати:
- значення за замовчуванням спрацьовує лише для
undefined, не дляnull:const { limit = 10 } = { limit: null }дастьnull; - деструктуризувати
nullчиundefinedнеможливо -TypeError; - деструктуризація масиву працює з будь-яким ітерованим значенням: рядком,
Set,Map(const [[key, value]] = map); - деструктуризація створює поверхневі копії значень: вкладені об'єкти лишаються спільними з оригіналом.
Аналог у PHP - [$first, $second] = $array і ['name' => $name] = $user.