Destructuring là chức năng mới trong ES6 của Javascript. Giúp extract dữ liệu (có thể lồng nhau) từ Array hoặc Object.

1. Object destructuring
const obj = { first: 'Jane', last: 'Doe' };
const {first: f, last: l} = obj;
// f = 'Jane'; l = 'Doe'
// {prop} is short for {prop: prop}
const {first, last} = obj;
// first = 'Jane'; last = 'Doe'2. Array destructuring
Destructuring giá trị từ mảng
const iterable = ['a', 'b'];
const [x, y] = iterable;
// x = 'a'; y = 'b'Destructuring cũng giúp xử lý giá trị được trả về
const [all, year, month, day] =
/^(\d\d\d\d)-(\d\d)-(\d\d)$/
.exec('2999-12-31');3. Khi nào cần sử dụng destructuring
Cơ bản, destructuring có thể được sử dụng ở 1 số trường hợp sau:
// Khai báo giá trị
const [x] = ['a'];
let [x] = ['a'];
var [x] = ['a'];
// Gán giá trị
[x] = ['a'];
// Định nghĩa các tham số
function f([x]) { ··· }
f(['a']);Sử dụng với vòng lặp for-of
const arr1 = ['a', 'b'];
for (const [index, element] of arr1.entries()) {
console.log(index, element);
}
// Output:
// 0 a
// 1 b
const arr2 = [
{name: 'Duyệt', age: 21},
{name: 'Hoa', age: 19},
];
for (const {name, age} of arr2) {
console.log(name, age);
}
// Output:
// Duyệt 41
// Hoa 404. Các Patterns
Một số patterns sử dụng sâu hơn chức năng này:
4.1 Pick what you need
Chỉ bóc tách lấy giá trị trong Object mà bạn cần
const { x: x } = { x: 7, y: 3 }; // x = 7
// Array
const [x,y] = ['a', 'b', 'c']; // x='a'; y='b';
// Hoặc khó hơn, và "sâu" hơn như thế này
const obj = { a: [{ foo: 123, bar: 'abc' }, {}], b: true };
const { a: [{foo: f}] } = obj; // f = 1234.2 Object patterns coerce values to objects
Pattern này ép giá trị nguồn (bên phải) thành object trước, khó để giải thích cái này, bạn xem ví dụ bên dưới
const {length : len} = 'abc'; // len = 3
const {toString: s} = 123; // s = Number.prototype.toString4.3 Array patterns work with iterables
// Strings are iterable:
const [x,...y] = 'abc'; // x='a'; y=['b', 'c']4.4 Sử dụng với Generator function (yield)
function* allNaturalNumbers() {
for (let n = 0; ; n++) {
yield n;
}
}
const [x, y, z] = allNaturalNumbers(); // x=0; y=1; z=24.5 Default values
const [x=3, y] = []; // x = 3; y = undefined
const {foo: x=3, bar: y} = {}; // x = 3; y = undefined
const [x=1] = [undefined]; // x = 1
const {prop: y=2} = {prop: undefined}; // y = 2
const [x=3, y=x] = []; // x=3; y=3
const [x=3, y=x] = [7]; // x=7; y=7
const [x=3, y=x] = [7, 2]; // x=7; y=2
// Khó hơn
const [{ prop: x } = {}] = [];4.6 Khuyết tham số
const [,, x, y] = ['a', 'b', 'c', 'd']; // x = 'c'; y = 'd'4.7. Load module Node.js
const { Loader, main } = require('toolkit/loader');