Đăng ngày

JavaScript Hash Map: Các cặp khóa-giá trị hiệu suất cao

Tác giả

Tại sao sử dụng Map?

Chúng ta đều biết rằng một ngôn ngữ lập trình khác có một thứ gọi là Hashtable. Đây là một cấu trúc dữ liệu lưu trữ các cặp khóa-giá trị, rất tuyệt vời bởi vì chúng có thời gian tra cứu O(1) không đổi. Đây là một cấu trúc dữ liệu có lợi mà chúng ta có thể sử dụng để lưu trữ dữ liệu. Trong JavaScript, chúng ta không có một cấu trúc dữ liệu tích hợp sẵn như Hashtable. Nhưng chúng ta có thể sử dụng một đối tượng để lưu trữ các cặp khóa-giá trị. Nó được gọi là Map trong JavaScript.

Map là gì?

Map là một bộ sưu tập các phần tử, trong đó mỗi phần tử được lưu trữ dưới dạng một cặp Khóa, Giá trị. Khóa và giá trị của Map có thể là bất kỳ giá trị nào (cả đối tượng và giá trị nguyên thủy). Một đối tượng Map lặp qua các phần tử của nó theo thứ tự chèn - một vòng lặp for...of trả về một mảng [key, value] cho mỗi lần lặp.

Map lưu trữ các cặp khóa-giá trị, trong đó khóa có thể là bất kỳ kiểu dữ liệu nào. Map có một thuộc tính thể hiện kích thước của Map. Map nhớ thứ tự chèn ban đầu của các khóa.

Các phương thức và thuộc tính của Map

Phương thứcMô tả
new Map()Tạo một đối tượng Map mới
set()Thiết lập giá trị cho một khóa trong Map
get()Trả về giá trị cho một khóa
has()Trả về một giá trị boolean cho biết liệu một khóa có tồn tại trong Map
delete()Xóa một khóa khỏi Map
clear()Xóa tất cả các khóa khỏi Map
values()Trả về một đối tượng lặp của các giá trị trong Map
keys()Trả về một đối tượng lặp của các khóa trong Map
entries()Trả về một đối tượng lặp của các cặp khóa-giá trị trong Map
forEach()Thực thi một hàm được cung cấp một lần cho mỗi cặp khóa-giá trị trong Map
Thuộc tínhMô tả
sizeTrả về số lượng cặp khóa/giá trị trong Map

Ví dụ về Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

console.log(map.get('name')) // John
console.log(map.get('age')) // 30
console.log(map.get('isMarried')) // true
console.log(map.get('address')) // {city: 'New York', state: 'NY'}
console.log(map.get('hobbies')) // ['reading', 'writing', 'coding']

console.log(map.size) // 5

Lặp qua Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

// Lặp qua các khóa
for (const key of map.keys()) {
  console.log(key)
}

// Lặp qua các giá trị
for (const value of map.values()) {
  console.log(value)
}

// Lặp qua các cặp khóa-giá trị
for (const [key, value] of map.entries()) {
  console.log(key, value)
}

// Lặp qua các cặp khóa-giá trị
map.forEach((value, key) => {
  console.log(key, value)
})

Map so với Object

MapObject
Map là một bộ sưu tập các mục dữ liệu được gán khóa, giống như Object. Nhưng sự khác biệt chính là Map cho phép khóa là bất kỳ kiểu nào.Khóa của Object phải là chuỗi hoặc biểu tượng.
Map có thể lặp qua và dễ dàng được lặp qua.Object không thể lặp qua và không thể được lặp qua dễ dàng.
Map có phương thức forEach tích hợp, vì vậy không cần phải chuyển đổi nó thành một mảng.Object không có phương thức forEach tích hợp.
Map có thuộc tính size, vì vậy chúng ta có thể dễ dàng lấy số lượng mục.Object không có thuộc tính size.
Map có thể sử dụng các đối tượng làm khóa.Object không thể sử dụng các đối tượng làm khóa.
Map thường nhanh hơn Object.Object thường chậm hơn Map.

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về Map trong JavaScript. Chúng ta đã tìm hiểu về các phương thức và thuộc tính của Map. Chúng ta cũng đã biết về sự khác biệt giữa Map và Object. Tôi hy vọng bạn đã thích bài viết này. Nếu bạn có bất kỳ câu hỏi nào, vui lòng để lại bình luận bên dưới. Cảm ơn bạn đã đọc.

Bài viết gốc được đăng tại: https://blog.imam.dev/blog/javascript-hashmap

Tham khảo

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

https://www.freecodecamp.org/news/what-is-a-javascript-map-what-are-the-differences-between-map-and-object-in-javascript/

https://www.geeksforgeeks.org/map-vs-object-javascript/