Cách sử dụng đối tượng Map JavaScript
Javascript căn bản | by
Trong JavaScript, Map
là một cấu trúc dữ liệu mạnh mẽ giúp lưu trữ các cặp key-value một cách có tổ chức và hiệu quả. Không giống như Object
, Map
hỗ trợ nhiều kiểu dữ liệu làm key và duy trì thứ tự của các phần tử theo thứ tự chèn vào. Để khai thác tối đa sức mạnh của Map
, JavaScript cung cấp một loạt phương thức giúp thao tác, duyệt và quản lý dữ liệu một cách linh hoạt.
Trong bài viết này, mình sẽ tìm hiểu chi tiết về các phương thức quan trọng của Map
, bao gồm cách thêm, xóa, truy xuất, kiểm tra phần tử, duyệt qua dữ liệu và chuyển đổi giữa Map
và các kiểu dữ liệu khác. Qua đó, bạn sẽ thấy được ứng dụng thực tế của Map
trong lập trình và hiểu tại sao nó là một lựa chọn tối ưu hơn Object
trong nhiều trường hợp.
Giới thiệu về Map trong JavaScript
Trong JavaScript, Map
là một kiểu cấu trúc dữ liệu được sử dụng để lưu trữ các cặp key-value (khóa-giá trị). Tương tự như Object
, Map
cho phép truy xuất dữ liệu bằng key, nhưng nó có một số đặc điểm nổi bật giúp xử lý dữ liệu hiệu quả hơn.
Map
là một tập hợp các cặp key-value, trong đó mỗi key là duy nhất. Không giống như Object
, Map
có thể sử dụng bất kỳ kiểu dữ liệu nào làm key, bao gồm string, number, boolean, object, function, v.v.
Ví dụ về cách tạo và sử dụng Map
:
const myMap = new Map(); myMap.set("name", "John"); // Thêm cặp key-value myMap.set(10, "Number key"); // Key có thể là số myMap.set(true, "Boolean key"); // Key có thể là boolean console.log(myMap.get("name")); // Output: "John" console.log(myMap.get(10)); // Output: "Number key" console.log(myMap.get(true)); // Output: "Boolean key"
Vai trò của Map
trong JavaScript:
- Lưu trữ dữ liệu có cấu trúc key-value một cách rõ ràng và có thể sử dụng mọi kiểu dữ liệu làm key.
- Duy trì thứ tự của các phần tử theo thứ tự chèn vào, giúp việc duyệt dữ liệu dễ dàng hơn.
- Cung cấp các phương thức linh hoạt để thao tác với dữ liệu như thêm, xóa, cập nhật, truy xuất nhanh chóng.
Vai trò của các phương thức trong Map
JavaScript cung cấp nhiều phương thức giúp làm việc với Map
hiệu quả. Dưới đây là một số phương thức quan trọng:
Phương thức | Mô tả | Ví dụ |
---|---|---|
.set(key, value) |
Thêm hoặc cập nhật giá trị với một key | map.set("age", 25); |
.get(key) |
Lấy giá trị từ key | map.get("age"); // 25 |
.has(key) |
Kiểm tra key có tồn tại trong Map không |
map.has("age"); // true |
.delete(key) |
Xóa một cặp key-value | map.delete("age"); |
.clear() |
Xóa toàn bộ các phần tử trong Map |
map.clear(); |
.size |
Trả về số lượng phần tử trong Map |
map.size; // 0 |
.keys() |
Trả về danh sách các key | for (let key of map.keys()) console.log(key); |
.values() |
Trả về danh sách các giá trị | for (let value of map.values()) console.log(value); |
.entries() |
Trả về danh sách các cặp key-value | for (let entry of map.entries()) console.log(entry); |
.forEach(callback) |
Lặp qua từng phần tử trong Map |
map.forEach((value, key) => console.log(key, value)); |
Những phương thức này giúp Map
linh hoạt hơn Object
, đặc biệt là trong các tình huống cần lưu trữ dữ liệu có key đa dạng hoặc duy trì thứ tự các phần tử.
So sánh Map với Object trong JavaScript
Tiêu chí | Map | Object |
---|---|---|
Kiểu dữ liệu của key | Có thể là bất kỳ kiểu dữ liệu nào (string, number, object, function,...) | Chỉ có thể là string hoặc symbol |
Thứ tự lưu trữ | Duy trì thứ tự chèn vào | Không đảm bảo thứ tự khi thêm/xóa |
Hiệu suất truy xuất | Nhanh hơn khi có nhiều phần tử | Chậm hơn do phải xử lý nhiều thuộc tính kế thừa |
Duyệt qua phần tử | Dễ dàng với .forEach() , .keys() , .values() , .entries() |
Cần dùng Object.keys() , Object.values() , Object.entries() |
Xóa toàn bộ phần tử | map.clear() |
Duyệt từng key để xóa hoặc gán {} mới |
Kiểm tra sự tồn tại của key | map.has(key) |
key in object hoặc object.hasOwnProperty(key) |
Dung lượng bộ nhớ | Tối ưu hơn trong nhiều trường hợp | Tiêu tốn bộ nhớ hơn khi làm việc với nhiều key |
Nhóm phương thức thao tác với phần tử Map trong JavaScript
Trong JavaScript, Map
cung cấp các phương thức hữu ích để thêm, lấy, kiểm tra, xóa và xóa toàn bộ các phần tử bên trong nó. Dưới đây là cách sử dụng từng phương thức một cách chi tiết.
.set(key, value) – Thêm hoặc cập nhật phần tử
Phương thức .set()
được sử dụng để thêm mới một cặp key-value vào Map
hoặc cập nhật giá trị của key đã tồn tại.
Cách sử dụng
const myMap = new Map(); // Thêm phần tử vào Map myMap.set("name", "Alice"); myMap.set("age", 25); myMap.set(true, "Boolean Key"); myMap.set(100, "Number Key"); console.log(myMap); // Map(4) { 'name' => 'Alice', 'age' => 25, true => 'Boolean Key', 100 => 'Number Key' } // Cập nhật giá trị của key đã tồn tại myMap.set("age", 30); console.log(myMap.get("age")); // Output: 30
Đặc điểm:
- Nếu key chưa tồn tại,
.set()
sẽ thêm một key-value mới vàoMap
. - Nếu key đã tồn tại,
.set()
sẽ cập nhật giá trị của key đó. Map
có thể sử dụng bất kỳ kiểu dữ liệu nào làm key, bao gồm string, number, boolean, object, function, v.v.
.get(key) – Lấy giá trị theo key
Phương thức .get()
được sử dụng để lấy giá trị của một key cụ thể trong Map
. Nếu key không tồn tại, nó sẽ trả về undefined
.
Cách sử dụng
const myMap = new Map(); myMap.set("username", "john_doe"); myMap.set("email", "[email protected]"); console.log(myMap.get("username")); // Output: "john_doe" console.log(myMap.get("email")); // Output: "[email protected]" console.log(myMap.get("phone")); // Output: undefined (key không tồn tại)
Đặc điểm:
.get(key)
trả về giá trị của key nếu key tồn tại.- Nếu key không tồn tại,
.get()
trả vềundefined
.
.has(key) – Kiểm tra sự tồn tại của key
Phương thức .has()
được sử dụng để kiểm tra xem một key có tồn tại trong Map
hay không.
Cách sử dụng
const myMap = new Map(); myMap.set("country", "Vietnam"); console.log(myMap.has("country")); // Output: true console.log(myMap.has("city")); // Output: false
Đặc điểm:
.has(key)
trả vềtrue
nếu key tồn tại trongMap
..has(key)
trả vềfalse
nếu key không tồn tại.
Ứng dụng thực tế:
- Kiểm tra xem một key có tồn tại trước khi lấy giá trị bằng
.get()
, giúp tránh lỗi khi truy xuất giá trị không tồn tại.
.delete(key) – Xóa một phần tử theo key
Phương thức .delete()
được sử dụng để xóa một cặp key-value khỏi Map
.
Cách sử dụng
const myMap = new Map(); myMap.set("fruit", "Apple"); myMap.set("drink", "Coffee"); console.log(myMap.has("fruit")); // Output: true // Xóa phần tử "fruit" myMap.delete("fruit"); console.log(myMap.has("fruit")); // Output: false console.log(myMap); // Map(1) { 'drink' => 'Coffee' }
Đặc điểm:
.delete(key)
trả vềtrue
nếu key tồn tại và bị xóa thành công..delete(key)
trả vềfalse
nếu key không tồn tại.
.clear() – Xóa toàn bộ phần tử trong Map
Phương thức .clear()
được sử dụng để xóa tất cả các phần tử trong Map
, làm cho Map
trở thành một tập hợp rỗng.
Cách sử dụng
const myMap = new Map(); myMap.set("user", "Alice"); myMap.set("role", "Admin"); console.log(myMap.size); // Output: 2 // Xóa toàn bộ phần tử myMap.clear(); console.log(myMap.size); // Output: 0 console.log(myMap); // Output: Map(0) {}
Đặc điểm:
.clear()
xóa tất cả các phần tử trongMap
.- Sau khi gọi
.clear()
, kích thước củaMap
trở về 0.
Ứng dụng thực tế:
- Sử dụng
.clear()
khi cần reset dữ liệu trongMap
, chẳng hạn như khi đăng xuất tài khoản và muốn xóa thông tin người dùng.
Phương thức | Chức năng | Trả về |
---|---|---|
.set(key, value) |
Thêm hoặc cập nhật key-value trong Map |
Map (có thể chain) |
.get(key) |
Lấy giá trị của một key | Giá trị của key hoặc undefined nếu không tồn tại |
.has(key) |
Kiểm tra key có tồn tại không | true hoặc false |
.delete(key) |
Xóa một phần tử theo key | true nếu xóa thành công, false nếu key không tồn tại |
.clear() |
Xóa toàn bộ phần tử trong Map |
Không có giá trị trả về |
.size |
Lấy số lượng phần tử trong Map |
Số lượng phần tử hiện có |
Nhóm phương thức làm việc với kích thước của Map trong JavaScript
Trong JavaScript, Map
có một thuộc tính đặc biệt là .size
, giúp lấy số lượng cặp key-value hiện có trong Map
.
.size – Trả về số lượng phần tử trong Map
Cách sử dụng .size
.size
là một thuộc tính của Map
, không phải một phương thức, vì vậy nó được sử dụng trực tiếp mà không cần dấu ()
.
const myMap = new Map(); myMap.set("name", "Alice"); myMap.set("age", 25); myMap.set("country", "Vietnam"); console.log(myMap.size); // Output: 3
Giải thích:
myMap
chứa 3 cặp key-value (name
,age
,country
)..size
trả về3
, tức là số phần tử hiện có trongMap
.
So sánh .size của Map với .length của Array
Thuộc tính | Map (.size ) |
Array (.length ) |
---|---|---|
Kiểu dữ liệu | Thuộc tính | Thuộc tính |
Công dụng | Trả về số cặp key-value trong Map |
Trả về số phần tử trong Array |
Cách sử dụng | map.size |
array.length |
Cập nhật kích thước | Tự động cập nhật khi thêm/xóa phần tử | Cần cập nhật thủ công trong một số trường hợp |
Hiệu suất | Tính toán tức thời | Có thể yêu cầu tính toán lại trong một số trường hợp |
Ví dụ so sánh:
const myArray = [10, 20, 30]; console.log(myArray.length); // Output: 3 const myMap = new Map(); myMap.set(1, "one"); myMap.set(2, "two"); console.log(myMap.size); // Output: 2