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àiThuộ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ướcMặ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ượngCá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 quaVà đâ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ảnMặ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
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ạiTí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ặpNgoà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
- 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ảngBả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ảngMả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_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value1
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value5
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value6
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____13
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value5____45
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____118
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____120
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value5____400
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value08
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value09
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value11
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____414
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value5____408
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value22
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value28
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value7
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value30
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value31
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value0
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value36
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____439
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value61
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value64
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value00
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value66
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value69
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2____469
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value3
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value5____436
ele[ele.map[[x, i] => [i, x]].filter[x => x[1] == old_value][0][0]] = new_value2
_______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