Làm thế nào để bạn sao chép trong javascript?

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); //3
0 và
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
1

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
0 và
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
1 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); //3
4, 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); //3
0 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); //3
6 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); //3
7 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); //3
8 để 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); //3
9, 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); //3
00
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
01
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45______103
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40

 

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); //3
42
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
46

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
48

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); //3
40

 

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); //3
42

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

đầu ra

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
4

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); //3
00
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
01
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45______103
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40

 

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); //3
42
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
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); //3
40

 

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); //3
42

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

đầu ra

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
4

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); //3
00
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
01
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40

 

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); //3
42
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

________ 144 ________ 100 ________ 1026

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
028

________ 144 ________ 1030 ________ 1031

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
032
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
033

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
037

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
400

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); //3
40

 

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); //3
42

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

đầu ra

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
4

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); //3
00
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
01
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
02
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
03
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
40

 

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); //3
42
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
00
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
428
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
42
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
430

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
030
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
433

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
032
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
435

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
438

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
440

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
44
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
45
var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
400

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); //3
40

 

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); //3
42

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
43

đầu ra

var a = { one : 1};var b = a;a.one = 2;console.log(b.one); // 2b.one = 3;console.log(a.one); //3
4

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ả.  

Bộ JavaScript có thể có bản sao không?

Đối tượng Set chỉ lưu trữ các giá trị duy nhất và tự động loại bỏ tất cả các giá trị trùng lặp. Khi một mảng chứa các bản sao được chuyển đến đối tượng Set, tất cả các bản sao sẽ bị xóa . Đã sao chép. Thuộc tính kích thước trên Tập hợp trả về số lượng giá trị mà Tập hợp chứa.

Làm cách nào bạn có thể nhân đôi các phần tử của một mảng trong JavaScript?

function double (arr){ let newArr = []; . chiều dài; . push(arr[i] * 2); . log(newArr) ; . .