Set (ES6+) lưu trữ giá trị duy nhất. Phương thức add(value) thêm phần tử, tự động bỏ qua nếu đã tồn tại.
Cú pháp
set.add(value)
- Trả về
Setobject (cho phép chaining:set.add(1).add(2)). - Nếu giá trị đã tồn tại, không thêm lại, không báo lỗi.
Ví dụ cơ bản (ES6 Set)
const mySet = new Set(); mySet.add(1); mySet.add(2); mySet.add(5); mySet.add(2); // Trùng lặp, bị bỏ qua console.log(mySet.has(5)); // true console.log(mySet.has(20)); // false console.log(mySet.has(1)); // true console.log(mySet.size); // 3 (chỉ 3 giá trị duy nhất) // Chaining new Set().add(1).add(2).add(3);
Triển khai thủ công (Custom MySet) - học tập
class MySet {
constructor() {
this.container = {};
}
has(val) {
return this.container.hasOwnProperty(val);
}
add(val) {
if (!this.has(val)) {
this.container[val] = val;
return true;
}
return false;
}
// ... delete, clear, forEach, static union/difference
}
Lưu ý
Setgiữ **thứ tự insertion order** (theo spec ES6).- Giá trị
NaNđược coi là bằng nhau (chỉ có 1 NaN trong Set). +0và-0được coi là khác nhau (trong SameValueZero thì cùng, nhưng Object key thì khác? Thực tế Set dùng SameValueZero: +0 === -0 → true, chỉ lưu 1).- Object/Array được so sánh bằng **reference** (khác object = khác giá trị).