Khi chúng tôi thay đổi thuộc tính của
var a = {}; a.a = a;3 hoặc
var a = {}; a.a = a;4, chúng tôi sẽ thay đổi giá trị tại địa chỉ của đối tượng
Khi thuộc tính của đối tượng được thay đổi, những thay đổi được phản ánh trong tất cả các biến trỏ đến đối tượng
Nếu chúng ta muốn sao chép một giá trị nguyên thủy, chúng ta có thể sử dụng
var a = {}; a.a = a;5, nhưng đối với các đối tượng, chúng ta không thể sử dụng toán tử gán
Khi sao chép các đối tượng, có hai loại
- Bản sao nông
- Bản sao sâu
Khi chúng ta sao chép nông một đối tượng nguồn sang một đối tượng đích, nếu giá trị thuộc tính của đối tượng nguồn là nguyên thủy, thì giá trị đó sẽ được sao chép sang đối tượng đích. Nhưng nếu giá trị thuộc tính của đối tượng nguồn là tham chiếu, thì tham chiếu được chia sẻ giữa đối tượng nguồn và đối tượng đích
Trong một bản sao sâu, tất cả các thuộc tính [bao gồm cả tham chiếu] của đối tượng nguồn được sao chép dưới dạng giá trị cho đối tượng đích. Không có chia sẻ tham chiếu giữa các đối tượng nguồn và đích
Sự khác biệt giữa sao chép nông và sâu
Bản sao nông
Sử dụng toán tử trải rộng
Toán tử trải phổ sẽ sao chép tất cả các thuộc tính có thể đếm được của
var a = {}; a.a = a;6 sang
var a = {}; a.a = a;7
Sử dụng vòng lặp
Đoạn mã trên sẽ lặp qua tất cả các thuộc tính của đối tượng và sao chép giá trị vào đối tượng đích
Sự vật. giao phó
var source = {one : 1, nested: {two : 2}};var target = Object.assign[{}, source];
Sao chép sâu
Sử dụng
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //30 và
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //31
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //30 và
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //31 chỉ hoạt động với số, chuỗi và đối tượng bằng chữ và không hỗ trợ thuộc tính hàm hoặc biểu tượng
Ngoài ra, nếu giá trị của thuộc tính trong đối tượng là
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //34, thì việc sử dụng
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //30 sẽ chuyển đổi
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //36 thành một chuỗi________số 8
Vật thể hình tròn là gì?
var a = {}; a.a = a;
Các đối tượng hình tròn là các đối tượng có giá trị thuộc tính tham chiếu đến chính chúng
Khi chúng tôi thực hiện một bản sao sâu của một đối tượng hình tròn, nó sẽ diễn ra vô tận.
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //37 sẽ đưa ra một lỗi ngoại lệ khi chúng tôi thực hiện một bản sao sâu trên một đối tượng hình tròn
Chúng ta có thể sử dụng
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //38 để sao chép đối tượng hình tròn — nhưng tránh tạo đối tượng hình tròn ngay từ đầu
Triển khai bản sao tùy chỉnh
Trong phương thức
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //39, chúng ta sẽ lặp qua tất cả các thuộc tính của đối tượng. Nếu giá trị của đối tượng là nguyên thủy, chỉ cần sao chép nó. Nếu giá trị là tham chiếu, hãy gọi phương thức
var source = {one : 1, nested: {two : 2}};var target = Object.assign[{}, source];0
Có nhiều phương pháp khác nhau để loại bỏ các bản sao trong mảng. Chúng tôi sẽ thảo luận về bốn cách phổ biến nhất
Sử dụng phương thức filter[]. Phương thức filter[] tạo một mảng mới gồm các phần tử vượt qua điều kiện mà chúng ta cung cấp. Nó sẽ chỉ bao gồm những phần tử mà giá trị true được trả về. Chúng tôi có thể loại bỏ các giá trị trùng lặp khỏi mảng bằng cách điều chỉnh điều kiện của chúng tôi
Javascript
var a = {}; a.a = a;8
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //300
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //301
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345______103
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //346
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //348
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
đầu ra
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //34
Sử dụng phương thức Set[]. Phương pháp này thiết lập một loại đối tượng mới với ES6 [ES2015] cho phép bạn tạo các bộ sưu tập các giá trị duy nhất
Javascript
var a = {}; a.a = a;8
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //300
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //301
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345______103
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = {}; a.a = a;96
var a = {}; a.a = a;97
var a = {}; a.a = a;98
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
đầu ra
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //34
Sử dụng phương thức forEach[]. Bằng cách sử dụng phương thức forEach[], chúng ta có thể lặp lại các phần tử trong mảng và chúng ta sẽ đẩy vào mảng mới nếu nó không tồn tại trong mảng
Javascript
var a = {}; a.a = a;8
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //300
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //301
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
________ 144 ________ 100 ________ 1026
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3028
________ 144 ________ 1030 ________ 1031
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3032
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3033
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3037
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3400
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
đầu ra
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //34
Sử dụng phương thức reduce[]. Phương thức reduce[] được sử dụng để rút gọn các phần tử của mảng và kết hợp chúng thành một mảng cuối cùng dựa trên một số hàm rút gọn mà bạn truyền vào
Javascript
var a = {}; a.a = a;8
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //300
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //301
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //302
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //303
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //300
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3428
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3430
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3030
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3433
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3032
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3435
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3438
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3440
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //344
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //345
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //3400
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //340
var a = {}; a.a = a;9
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //342
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //343
đầu ra
var a = { one : 1};var b = a;a.one = 2;console.log[b.one]; // 2b.one = 3;console.log[a.one]; //34
Sử dụng Phương thức indexOf[]. Phương thức indexOf[] được sử dụng để tìm chỉ số xuất hiện đầu tiên của một phần tử mảng. chúng ta có thể lặp lại các phần tử trong mảng và chúng ta sẽ đẩy vào mảng mới nếu nó không tồn tại trong mảng kết quả.