Set là cấu trúc dữ liệu lưu trữ **giá trị duy nhất** (unique), không trùng lặp, không đảm bảo thứ tự (nhưng ES6 giữ insertion order).
1. Tạo Set ES6 (Khuyên dùng)
// Set rỗng
const set1 = new Set();
// Set từ iterable (array, string, set khác...)
const set2 = new Set([1, 2, 5, 6]);
const set3 = new Set("hello"); // Set {'h', 'e', 'l', 'o'}
const set4 = new Set(document.querySelectorAll('div')); // Set của element nodes
2. Kiểm tra thành viên (Membership test)
const mySet = new Set([1, 2, 5, 6]); console.log(mySet.has(5)); // true console.log(mySet.has(20)); // false console.log(mySet.has(1)); // true
3. Triển khai thủ công (Custom MySet) - để hiểu bản chất
class MySet {
constructor() {
this.container = {}; // Object làm hash map: key = value, value = value
}
// Kiểm tra tồn tại
has(val) {
return this.container.hasOwnProperty(val);
}
// Hiển thị (debug)
display() {
console.log(this.container);
}
// Thêm, xóa, clear, forEach, static union/difference...
}
Khi nào dùng Set?
- Lưu danh sách **unique values** (loại bỏ trùng lặp tự động).
- Kiểm tra **membership** (có tồn tại không?) hiệu năng O(1) trung bình.
- Thực hiện phép toán tập hợp: **Union, Intersection, Difference** (cần tự implement hoặc dùng library).
- Khi **thứ tự không quan trọng** (nhưng ES6 giữ insertion order).
Các method chính (ES6 Set API)
| Method | Mô tả |
|---|---|
add(val) | Thêm giá trị, trả về Set |
delete(val) | Xóa giá trị, trả true/false |
has(val) | Kiểm tra tồn tại, trả true/false |
clear() | Xóa tất cả |
forEach(cb) | Duyệt từng giá trị |
values() | Trả iterator (giá trị = key) |
keys() | Alias của values() |
entries() | Trả iterator [value, value] |
size | Property: số lượng phần tử |