Giải nén python tuple lồng nhau

Cú pháp gán phá hủy là một biểu thức JavaScript cho phép giải nén các giá trị từ mảng hoặc thuộc tính từ các đối tượng thành các biến riêng biệt

const [a, b] = array;
const [a, , b] = array;
const [a = aDefault, b] = array;
const [a, b, ...rest] = array;
const [a, , b, ...rest] = array;
const [a, b, ...{ pop, push }] = array;
const [a, b, ...[c, d]] = array;

const { a, b } = obj;
const { a: a1, b: b1 } = obj;
const { a: a1 = aDefault, b = bDefault } = obj;
const { a, b, ...rest } = obj;
const { a: a1, b: b1, ...rest } = obj;
const { [key]: a } = obj;

let a, b, a1, b1, c, d, rest, pop, push;
[a, b] = array;
[a, , b] = array;
[a = aDefault, b] = array;
[a, b, ...rest] = array;
[a, , b, ...rest] = array;
[a, b, ...{ pop, push }] = array;
[a, b, ...[c, d]] = array;

[{ a, b } = obj]; // brackets are required
[{ a: a1, b: b1 } = obj];
[{ a: a1 = aDefault, b = bDefault } = obj];
[{ a, b, ...rest } = obj];
[{ a: a1, b: b1, ...rest } = obj];

Các biểu thức đối tượng và mảng cung cấp một cách dễ dàng để tạo các gói dữ liệu đặc biệt

const x = [1, 2, 3, 4, 5];

Phép gán phá hủy sử dụng cú pháp tương tự, nhưng ở phía bên trái của phép gán để xác định giá trị nào cần giải nén từ biến nguồn

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2

Tương tự, bạn có thể hủy cấu trúc các đối tượng ở phía bên trái của bài tập

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;

Khả năng này tương tự như các tính năng có trong các ngôn ngữ như Perl và Python

Đối với cả phá hủy đối tượng và mảng, có hai loại mẫu phá hủy. mẫu liên kết và mẫu gán, với các cú pháp hơi khác nhau

Trong các mẫu liên kết, mẫu bắt đầu bằng từ khóa khai báo [

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
4,
const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
5 hoặc
const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
6]. Sau đó, mỗi thuộc tính riêng lẻ phải được liên kết với một biến hoặc bị hủy cấu trúc thêm

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`

Tất cả các biến chia sẻ cùng một khai báo, vì vậy nếu bạn muốn một số biến có thể gán lại nhưng những biến khác ở dạng chỉ đọc, bạn có thể phải hủy cấu trúc hai lần — một lần với

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
5, một lần với
const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
6

const x = [1, 2, 3, 4, 5];
0

Trong các mẫu gán, mẫu không bắt đầu bằng từ khóa. Mỗi thuộc tính bị hủy cấu trúc được gán cho một mục tiêu của phép gán — có thể được khai báo trước bằng

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
4 hoặc
const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
5 hoặc là thuộc tính của một đối tượng khác — nói chung, bất kỳ thứ gì có thể xuất hiện ở phía bên trái của biểu thức gán

const x = [1, 2, 3, 4, 5];
3

Ghi chú. Dấu ngoặc đơn

const x = [1, 2, 3, 4, 5];
01 xung quanh câu lệnh gán là bắt buộc khi sử dụng phép gán phá hủy theo nghĩa đen của đối tượng mà không cần khai báo

const x = [1, 2, 3, 4, 5];
02 không phải là cú pháp độc lập hợp lệ, vì
const x = [1, 2, 3, 4, 5];
03 ở phía bên trái được coi là một khối và không phải là một đối tượng theo nghĩa đen. Tuy nhiên,
const x = [1, 2, 3, 4, 5];
04 là hợp lệ, cũng như
const x = [1, 2, 3, 4, 5];
05

Nếu kiểu viết mã của bạn không bao gồm dấu chấm phẩy ở cuối, thì biểu thức

const x = [1, 2, 3, 4, 5];
01 cần phải được đặt trước dấu chấm phẩy hoặc biểu thức này có thể được sử dụng để thực thi một hàm trên dòng trước đó

Lưu ý rằng mẫu liên kết tương đương của mã ở trên không phải là cú pháp hợp lệ

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
0

Mỗi thuộc tính bị hủy cấu trúc có thể có một giá trị mặc định. Giá trị mặc định được sử dụng khi thuộc tính không có hoặc có giá trị

const x = [1, 2, 3, 4, 5];
07. Nó không được sử dụng nếu tài sản có giá trị
const x = [1, 2, 3, 4, 5];
08

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
3

Giá trị mặc định có thể là bất kỳ biểu thức nào. Nó sẽ chỉ được đánh giá khi cần thiết

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
4

Bạn có thể kết thúc một mẫu phá hủy bằng thuộc tính còn lại

const x = [1, 2, 3, 4, 5];
09. Mẫu này sẽ lưu trữ tất cả các thuộc tính còn lại của đối tượng hoặc mảng vào một đối tượng hoặc mảng mới

const x = [1, 2, 3, 4, 5];
0

Thuộc tính còn lại phải là thuộc tính cuối cùng trong mẫu và không được có dấu phẩy ở cuối

const x = [1, 2, 3, 4, 5];
1

Trong nhiều cú pháp mà ngôn ngữ liên kết một biến cho bạn, bạn cũng có thể sử dụng mẫu phá hủy. Bao gồm các

  • Biến lặp của vòng lặp
    const x = [1, 2, 3, 4, 5];
    
    30 và
    const x = [1, 2, 3, 4, 5];
    
    31;
  • Tham số chức năng;
  • Biến ràng buộc
    const x = [1, 2, 3, 4, 5];
    
    32

Để biết các tính năng dành riêng cho việc phá hủy mảng hoặc đối tượng, vui lòng tham khảo các ví dụ riêng lẻ bên dưới

gán biến cơ bản

const x = [1, 2, 3, 4, 5];
2

Phá hủy với nhiều yếu tố hơn nguồn

Trong một mảng phá hủy từ một mảng có độ dài N được chỉ định ở phía bên phải của phép gán, nếu số lượng biến được chỉ định ở phía bên trái của phép gán lớn hơn N, thì chỉ N biến đầu tiên được gán giá trị. Giá trị của các biến còn lại sẽ không được xác định

const x = [1, 2, 3, 4, 5];
3

Hoán đổi biến

Hai giá trị biến có thể được hoán đổi trong một biểu thức phá hủy

Không hủy phép gán, hoán đổi hai giá trị yêu cầu một biến tạm thời [hoặc, trong một số ngôn ngữ cấp thấp, thủ thuật hoán đổi XOR]

const x = [1, 2, 3, 4, 5];
4

Phân tích một mảng được trả về từ một hàm

Luôn luôn có thể trả về một mảng từ một hàm. Việc hủy cấu trúc có thể giúp làm việc với một giá trị trả về mảng ngắn gọn hơn

Trong ví dụ này,

const x = [1, 2, 3, 4, 5];
33 trả về các giá trị
const x = [1, 2, 3, 4, 5];
34 làm đầu ra của nó, giá trị này có thể được phân tích cú pháp trong một dòng bằng cách hủy

const x = [1, 2, 3, 4, 5];
5

Bỏ qua một số giá trị trả về

Bạn có thể bỏ qua các giá trị trả về mà bạn không quan tâm

const x = [1, 2, 3, 4, 5];
6

Bạn cũng có thể bỏ qua tất cả các giá trị trả về

const x = [1, 2, 3, 4, 5];
7

Sử dụng một mẫu liên kết làm thuộc tính còn lại

Thuộc tính còn lại của phép gán phá hủy mảng có thể là một mẫu liên kết mảng hoặc đối tượng khác. Điều này cho phép bạn giải nén đồng thời các thuộc tính và chỉ số của mảng

const x = [1, 2, 3, 4, 5];
8

const x = [1, 2, 3, 4, 5];
9

Các mẫu liên kết này thậm chí có thể được lồng vào nhau, miễn là mỗi thuộc tính còn lại là thuộc tính cuối cùng trong danh sách

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
0

Mặt khác, việc hủy đối tượng chỉ có thể có một mã định danh là thuộc tính còn lại

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
1

Giải nén các giá trị từ đối sánh cụm từ thông dụng

Khi phương thức

const x = [1, 2, 3, 4, 5];
35 của biểu thức chính quy tìm thấy kết quả khớp, nó trả về một mảng trước tiên chứa toàn bộ phần được khớp của chuỗi và sau đó là các phần của chuỗi khớp với từng nhóm được đặt trong ngoặc đơn trong biểu thức chính quy. Destructuring assignment allows you to unpack the parts out of this array easily, ignoring the full match if it is not needed

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
2

Sử dụng phá hủy mảng trên bất kỳ lần lặp nào

Phá hủy mảng gọi giao thức lặp lại của phía bên tay phải. Do đó, bất kỳ mảng nào có thể lặp lại, không nhất thiết phải là mảng, đều có thể bị hủy cấu trúc

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
3

Không thể lặp lại không thể bị hủy cấu trúc dưới dạng mảng

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
4

Iterables chỉ được lặp lại cho đến khi tất cả các ràng buộc được chỉ định

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
5

Ràng buộc còn lại được đánh giá một cách háo hức và tạo ra một mảng mới, thay vì sử dụng lần lặp cũ

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
6

nhiệm vụ cơ bản

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
7

Gán tên biến mới

Một thuộc tính có thể được giải nén từ một đối tượng và được gán cho một biến có tên khác với thuộc tính của đối tượng

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
8

Ví dụ, ở đây,

const x = [1, 2, 3, 4, 5];
36 lấy từ đối tượng
const x = [1, 2, 3, 4, 5];
37 thuộc tính có tên là
const x = [1, 2, 3, 4, 5];
38 và gán nó cho một biến cục bộ có tên là
const x = [1, 2, 3, 4, 5];
39

Gán tên biến mới và cung cấp giá trị mặc định

Một tài sản có thể là cả hai

  • Giải nén từ một đối tượng và gán cho một biến có tên khác
  • Đã gán giá trị mặc định trong trường hợp giá trị được giải nén là
    const x = [1, 2, 3, 4, 5];
    
    07

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
9

Giải nén các thuộc tính từ các đối tượng được truyền dưới dạng tham số chức năng

Các đối tượng được truyền vào các tham số hàm cũng có thể được giải nén thành các biến, sau đó có thể được truy cập trong phần thân hàm. Đối với việc gán đối tượng, cú pháp phá hủy cho phép biến mới có cùng tên hoặc khác tên với thuộc tính ban đầu và gán giá trị mặc định cho trường hợp khi đối tượng ban đầu không xác định thuộc tính

Hãy xem xét đối tượng này, chứa thông tin về người dùng

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
0

Ở đây chúng tôi trình bày cách giải nén một thuộc tính của đối tượng được truyền vào một biến có cùng tên. Giá trị tham số

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
01 cho biết rằng thuộc tính
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
02 của đối tượng được truyền cho hàm phải được giải nén thành một biến có cùng tên, sau đó có thể được sử dụng trong hàm

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
1

Bạn có thể xác định tên của biến giải nén. Ở đây chúng tôi giải nén thuộc tính có tên là

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
03 và đổi tên nó thành
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
04 để sử dụng trong thân hàm

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
2

Các đối tượng lồng nhau cũng có thể được giải nén. Ví dụ dưới đây cho thấy thuộc tính

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
05 được giải nén thành một biến có tên là
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
06

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
3

Đặt giá trị mặc định của tham số chức năng

Giá trị mặc định có thể được chỉ định bằng cách sử dụng

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
07 và sẽ được sử dụng làm giá trị biến nếu thuộc tính được chỉ định không tồn tại trong đối tượng được truyền

Dưới đây, chúng tôi hiển thị một hàm có kích thước mặc định là

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
08, tọa độ mặc định là
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
09 và bán kính mặc định là 25

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
4

Trong chữ ký hàm cho

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
30 ở trên, phía bên trái bị hủy cấu trúc có giá trị mặc định là một đối tượng trống
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
31

Bạn cũng có thể đã viết hàm mà không có mặc định đó. Tuy nhiên, nếu bạn bỏ qua giá trị mặc định đó, hàm sẽ tìm kiếm ít nhất một đối số được cung cấp khi được gọi, trong khi ở dạng hiện tại, bạn có thể gọi

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
32 mà không cần cung cấp bất kỳ tham số nào. Mặt khác, ít nhất bạn cần cung cấp một đối tượng trống theo nghĩa đen

Để biết thêm thông tin, xem

Đối tượng lồng nhau và phá hủy mảng

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
5

Đối với phép lặp và phá hủy

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
6

Tên thuộc tính đối tượng được tính toán và phá hủy

Tên thuộc tính được tính toán, như on , có thể được sử dụng với tính năng hủy

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
7

Mã định danh JavaScript không hợp lệ làm tên thuộc tính

Có thể sử dụng tính năng hủy cấu trúc với tên thuộc tính không phải là mã định danh JavaScript hợp lệ bằng cách cung cấp mã định danh thay thế hợp lệ

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
8

Phá hủy đối tượng gần như tương đương với truy cập thuộc tính. Điều này có nghĩa là nếu bạn cố gắng hủy một giá trị nguyên thủy, giá trị đó sẽ được gói vào đối tượng trình bao tương ứng và thuộc tính được truy cập trên đối tượng trình bao

const obj = { a: 1, b: 2 };
const { a, b } = obj;
// is equivalent to:
// const a = obj.a;
// const b = obj.b;
9

Giống như truy cập các thuộc tính, phá hủy

const x = [1, 2, 3, 4, 5];
08 hoặc
const x = [1, 2, 3, 4, 5];
07 ném một
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
35

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
0

Điều này xảy ra ngay cả khi mẫu trống

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
1

Kết hợp mảng và phá hủy đối tượng

Phá hủy mảng và đối tượng có thể được kết hợp. Giả sử bạn muốn phần tử thứ ba trong mảng

const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
36 bên dưới, sau đó bạn muốn thuộc tính
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log[y]; // 1
console.log[z]; // 2
06 trong đối tượng, bạn có thể thực hiện như sau

const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
2

Chuỗi nguyên mẫu được tra cứu khi đối tượng được giải cấu trúc

Khi giải cấu trúc một đối tượng, nếu một thuộc tính không được truy cập vào chính nó, nó sẽ tiếp tục tìm kiếm dọc theo chuỗi nguyên mẫu

Chủ Đề