Thay thế đối tượng cũ bằng JavaScript đối tượng mới

Trong bài đăng này, tôi muốn chia sẻ nghiên cứu của mình về Map, một loại bộ sưu tập JavaScript mới được giới thiệu trong ES6. Gần đây, tôi đang xem xét việc tái cấu trúc mã JavaScript của mình với hy vọng cải thiện mức độ tối ưu hóa cho ứng dụng web của mình. Thay thế các đối tượng cũ bằng Bản đồ có thể là một cách để đạt được mục tiêu

Thảo luận về Bản đồ mà không so sánh Đối tượng là điều không thể tránh khỏi vì chúng rất giống nhau như anh em một nhà ở chỗ cả hai đều nắm giữ các cặp khóa trong bộ sưu tập của mình. Trong hầu hết các trường hợp, chúng có thể được sử dụng thay thế cho nhau

Tuy nhiên, nếu bạn thực sự nghiêm túc về việc tối ưu hóa ứng dụng của mình và duy trì mã ngắn gọn nhất có thể, tốt hơn hết bạn nên cân nhắc việc thay thế một số Đối tượng cũ trên mã của mình bằng Bản đồ. Đặc biệt, nếu ứng dụng của bạn xử lý một tập hợp dữ liệu lớn, thường xuyên thêm và xóa dữ liệu, Bản đồ có thể cải thiện ứng dụng của bạn theo nhiều cách

1. Bản đồ. kích thước so với đối tượng. phím [đối tượng]. chiều dài

Thuộc tính "kích thước" của bản đồ rất mạnh trong việc đếm độ dài của chính nó. Nó có thể được sử dụng giống như thuộc tính “độ dài” của Array

đếm chiều dài của bản đồ theo thuộc tính kích thước

Mặt khác, việc đếm kích thước của Đối tượng không đơn giản như Bản đồ. Trước tiên, bạn sẽ nhận được một mảng khóa được chuyển đổi bởi Object. keys[object] rồi đếm độ dài của mảng

Đếm chiều dài của đối tượng

Cái nào nhanh hơn? . Nhưng tôi đã thất bại. Tôi quyết định tạo mã thử nghiệm và tự chạy mã để tìm ra câu trả lời

Cú đánh là mã thí nghiệm. Đoạn mã đo lường và so sánh phần triệu giây đã trôi qua trong quá trình đếm kích thước của Bản đồ và Đối tượng

thí nghiệm so sánh độ dài đếm thời gian đã trôi qua

Và đây là kết quả của thí nghiệm

Bảng kết quả

Như thể hiện trên bảng kết quả, Bản đồ. kích thước nhanh hơn nhiều. Đặc biệt, khi kích thước tăng lên, nó hoạt động tốt hơn theo cấp số nhân. Ngạc nhiên thay, kết quả của Map. kích thước không liên quan đến kích thước của nó. Có thể suy ra rằng Bản đồ. kích thước không tự lặp lại trong khi đếm trong khi Object. phím [đối tượng]. chiều dài không

Bản đồ. has[key] vs Object. phím [đối tượng]. bao gồm [chìa khóa]

Một phương thức tiện lợi khác của Map là “has[key]”. Phương thức tra cứu nếu Bản đồ có khóa cụ thể và trả về true nếu có hoặc sai nếu không

bản đồ có tài sản

Mặt khác, Object không có phương thức trực tiếp như vậy. Để thực hiện công việc tương tự trên Object, trước tiên bạn nên lấy mảng khóa và kiểm tra xem mảng khóa có bao gồm các khóa cụ thể không

bản đồ. có[]

Có vẻ như Bản đồ. has[] sạch hơn và tôi đoán nó hoạt động tốt hơn vì cùng lý do nó hoạt động tốt hơn khi đếm kích thước của nó. Tôi đã không chạy thử nghiệm mặc dù

Bản đồ. xóa[key] và xóa đối tượng[key]

Bản đồ có phương thức "xóa [khóa]" để xóa khóa-giá trị cụ thể. Nó trả về true nếu bản đồ đã có khóa và khóa-giá trị đã được xóa thành công. Nó trả về false nếu bản đồ không có khóa nên không có gì bị xóa

phương pháp xóa bản đồ

Mặt khác, bạn có thể xóa bộ khóa-giá trị trong đối tượng bằng toán tử xóa

Tuy nhiên, toán tử "xóa" được biết là rất chậm và không an toàn. Đôi khi nó gây ra các lỗi không mong muốn nên cần thận trọng khi sử dụng và thường không được khuyến nghị

Bản đồ có thể lặp lại

Tính năng quan trọng khác của Map là khả năng lặp lại của nó. Cách đơn giản nhất để lặp Bản đồ là sử dụng “for…of” như sau

cho…của bản đồ lặp

Ngoài for…of, Map còn có nhiều phương thức tự lặp lại như Map. phím [] và Bản đồ. giá trị[]. Cả hai đều trả về các lần lặp mới chỉ với các giá trị hoặc chỉ với các khóa

  1. Bản đồ. phím[]

Điều này trả về một trình lặp bản đồ. Giá trị không thể truy cập keys[0] như trong mảng. Chỉ có thể truy cập giá trị bằng cách lặp qua trình vòng lặp

2. Bản đồ. giá trị[]

Điều này giống như Bản đồ. keys[] ngoại trừ việc nó trả về một giá trị có thể lặp lại

Quan hệ với Mảng

Bản đồ và Mảng có thể chuyển đổi sang/từ nhau rất linh hoạt

Có một số cách chuyển đổi Bản đồ thành Mảng. Cách dễ nhất là sử dụng cú pháp lây lan

Ánh xạ tới mảng

Mảng thành bản đồ Hợp nhất nhiều bản đồ

Sử dụng cú pháp trải rộng, nhiều bản đồ có thể được hợp nhất

Nếu các Bản đồ khác nhau có cùng một khóa, thì khóa lặp lại cuối cùng duy nhất sẽ tồn tại. Trong mã bên dưới, cả hai bản đồ đều có Kim, nhưng chỉ còn lại Kim[74000] trong employeeSalaryMap2

hợp nhất bản đồ

Hỗ trợ trình duyệt

Khi viết bài này, hầu hết các trình duyệt chính, ngoại trừ IE, đều hỗ trợ Bản đồ

 

Phương pháp 2. Sử dụng các phương thức array map[] và filter[]. Phương thức map[] trong JavaScript tạo một mảng bằng cách gọi một hàm cụ thể trên từng phần tử có trong mảng cha. mảng. filter[] hàm được sử dụng để tạo một mảng mới từ một mảng đã cho chỉ bao gồm các phần tử từ mảng đã cho thỏa mãn điều kiện do hàm đối số đặt

Tiếp cận

  • Khởi tạo một mảng
  • Chọn chỉ mục được nhắm mục tiêu với sự trợ giúp của. bản đồ và. phương pháp lọc
  • Đặt giá trị mới tại chỉ mục được nhắm mục tiêu

cú pháp

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value

ví dụ 2. Dưới đây là một số ví dụ minh họa cho phương thức Splice[]

HTML




ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
1
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
5
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
6
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____13

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
5____45
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____118

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____120

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
5____400
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
08
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
09
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
11
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____414

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
5____408
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
22
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
28
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
30
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
31
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
36
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____439

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
61

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
64

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
66

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
00

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
69

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2____469

ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
5____436
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value
2

_______15____41____42

đầu ra

 

JavaScript được biết đến nhiều nhất để phát triển trang web nhưng nó cũng được sử dụng trong nhiều môi trường không có trình duyệt. Bạn có thể học JavaScript từ đầu bằng cách làm theo Hướng dẫn JavaScript và Ví dụ về JavaScript này

Làm cách nào để thay thế đối tượng cũ bằng đối tượng mới trong JavaScript?

Sử dụng phương thức được xác định trước trong JavaScript “splice[]” để thay thế các đối tượng trong một mảng . Nó thêm hoặc loại bỏ các phần tử mảng đã chỉ định và sửa đổi mảng ban đầu. Nó được sử dụng trong sự kết hợp của phương thức indexOf[] để truy cập chỉ mục của phần tử mảng đã chỉ định và nối nó.

Làm cách nào để tạo đối tượng mới từ đối tượng hiện có trong JavaScript?

tạo[] Đối tượng. phương thức create[] tạo một đối tượng mới, sử dụng một đối tượng hiện có làm nguyên mẫu của đối tượng mới được tạo.

Làm cách nào bạn có thể thay thế một phần tử hiện có trong một đối tượng trong JavaScript?

Phương pháp 1. Sử dụng phương thức mối nối[] .

Chủ Đề