Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xóa phần tử khỏi Dictionary (Map/Object) trong JavaScript

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ácObjectMap (ES6)
Xóa 1 keydelete obj.keymap.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ớimap.clear() (O(1))
Key không tồn tạidelete 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 = undefined hoặc null để "xóa" - Key vẫn tồn tại, "key" in obj vẫn true, Object.keys() vẫn liệt kê.
  • Với Map, delete trả về false nế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".