Set
完整的例子
let set = new Set();
set.add("foo");
set.add("bar");
set.add("foo"); // 重复添加不会生效
// 或者一步到位直接初始化
let set = new Set(["foo", "bar"]);
let value1 = set.has("foo");
console.log(value1); // true
let value2 = set.has("qux");
console.log(value2); // false
set.delete("bar");
let value3 = set.has("bar");
console.log(value3); // false
let value4 = set.size;
console.log(value4); // 1
set.clear();
let value5 = set.size;
console.log(value5); // 0
其实 JavaScript 中可以用对象来模拟 Set 的功能
用对象模拟:
let set = {};
set["foo"] = true;
set["bar"] = true;
set["foo"] = true; // 重复添加不会增加新键
// 或者一步到位初始化
let set = {
foo: true,
bar: true,
};
let value1 = Object.hasOwn(set, "foo");
console.log(value1); // true
let value2 = Object.hasOwn(set, "qux");
console.log(value2); // false
delete set["bar"];
let value3 = Object.hasOwn(set, "bar");
console.log(value3); // false
let value4 = Object.keys(set).length;
console.log(value4); // 1
set = {};
let value5 = Object.keys(set).length;
console.log(value5); // 0
2. 要点
-
Set 的主要特点是自动去重,添加重复的值不会生效
let set = new Set([1, 2, 2, 3, 3, 3]); console.log(set.size); // 3 console.log([...set]); // [1, 2, 3] -
Set 可以存储任何类型的值,包括对象和原始值
let set = new Set(); set.add(1); set.add("1"); set.add(true); set.add({ name: "obj" }); console.log(set.size); // 4,不同类型的值被视为不同 -
Set 的遍历方法
let set = new Set(["foo", "bar", "baz"]); // forEach set.forEach((value) => { console.log(value); }); // for...of for (let item of set) { console.log(item); } // 转换为数组 let arr = [...set]; // 或者 let arr = Array.from(set); -
数组去重的最佳实践就是利用 Set
let arr = [1, 2, 2, 3, 4, 4, 5]; let uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // [1, 2, 3, 4, 5]