Xóa key khỏi Dictionary trong JavaScript tùy thuộc vào dùng Object hay Map (ES6).
1. Xóa khỏi Object (Cũ / Legacy)
Dùng toán tử delete.
const obj = { key1: "value1", key2: "value2" };
// Xóa key1
delete obj.key1; // true
// Hoặc
delete obj["key1"]; // true (key có ký tự đặc biệt, biến)
// Kiểm tra
console.log(obj.key1); // undefined
console.log("key1" in obj); // false
console.log(obj.hasOwnProperty("key1")); // false
// Xóa key không tồn tại
delete obj.nonexistent; // true (không lỗi, trả về true)
Wrapper function an toàn (Custom Dictionary)
class MyMap {
constructor() { this.container = {}; }
hasKey(key) { return key in this.container; }
delete(key) {
if (this.hasKey(key)) {
delete this.container[key];
return true; // Đã xóa
}
return false; // Key không tồn tại
}
}
const myMap = new MyMap();
myMap.put("key1", "value1");
myMap.put("key2", "value2");
myMap.display(); // { key1: 'value1', key2: 'value2' }
myMap.delete("key2"); // true
myMap.display(); // { key1: 'value1' }
myMap.delete("key3"); // false (không có)
2. Xóa khỏi ES6 Map (Khuyên dùng)
Dùng phương thức .delete(key).
const myMap = new Map([
["key1", "value1"],
["key2", "value2"]
]);
// Xóa
const deleted = myMap.delete("key2"); // true
console.log(deleted); // true
// Kiểm tra
console.log(myMap.has("key1")); // true
console.log(myMap.has("key2")); // false
// Xóa key không tồn tại
console.log(myMap.delete("key3")); // false
3. Xóa toàn bộ (Clear)
// Object
Object.keys(obj).forEach(key => delete obj[key]);
// Hoặc gán mới: obj = {}; (nếu const -> lỗi, dùng let)
// Map
myMap.clear(); // Xóa tất cả, O(1) nhanh hơn Object
console.log(myMap.size); // 0
So sánh
| Thao tác | Object | Map (ES6) |
|---|---|---|
| Xóa 1 key | delete obj.key | map.delete(key) |
| Trả về | true/false (true kể cả key không tồn tại) | true (đã xóa) / false (không tồn tại) |
| Xóa tất cả | Vòng lặp delete hoặc gán object mới | map.clear() (O(1)) |
| Key không tồn tại | delete trả về true (không lỗi) | delete trả về false |
⚠️ Lưu ý quan trọng
- delete trên Object không giải phóng bộ nhớ ngay lập tức, chỉ loại bỏ property. GC sẽ dọn sau.
- delete làm chậm tối ưu hóa JIT (hidden class transition) nếu dùng nhiều trên object "hot". Map không có vấn đề này.
- Không dùng
obj.key = undefinedhoặcnullđể "xóa" - Key vẫn tồn tại,"key" in objvẫn true,Object.keys()vẫn liệt kê. - Với Map,
deletetrả vềfalsenếu key không tồn tại -> Dễ kiểm tra logic.
Tóm lại: Xóa key Dictionary: Object dùng delete obj.key, Map dùng map.delete(key) (trả về boolean chính xác). Map clear() xóa tất cả O(1). Ưu tiên Map cho Dictionary động. Tránh gán undefined/null để "xóa".