原文链接:https://github.com/taoliujun/blog/issues/14
为什么用Set
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| let arr1 = ["a", "b", "c", "d"];
arr1 = arr1.filter((element) => element !== "d"); arr1.filter((element) => element !== "e").push("e"); console.log(arr1.includes("b"));
let obj1 = { a: true, b: true, c: true, d: true };
delete obj1.d; obj1.e = true; console.log("b" in obj1);
let set1 = new Set(["a", "b", "c"]);
set1.delete("d"); set1.add("e"); console.log(set1.has("b"));
|
如上演示了Array、Object、Set三种数据结构的基本操作,Set提供了更为便捷的方式:
- 相比Array有更简单的语法,在运算复杂度上有很大提升。
- 相比Object的命令式操作,Set提供了方法式的操作。
唯一特性
在工作中,要用到集合唯一特性的场景有很多,用Array实现的时候,需要自己写很多代码来保证唯一性,而用Object实现,又不能保证元素的访问顺序。
举几个例子。
1 2 3 4 5 6 7 8 9 10
| const s1 = new Set();
s1.add("长江"); s1.add("黄河"); s1.add("故宫"); s1.add("长江"); s1.add("圆明园");
console.log(s1);
|
1 2 3 4 5
| const a = [23, 58, 23, 19, 96]; const s1 = new Set(a);
console.log(Array.from(s1));
|
注意点
- Set为了保持元素的唯一,内部使用了
SameValueZero
算法,这意味着NaN
和NaN
是相等的,+0
和-0
是相等的。