今天重点见一下Set
Set 在我印象里它主要就是去重,Set
是一个值的集合,这个集合中所有的值仅出现一次
Set 属性size:和Map的size一样,返回成员的总数
Set的方法:
Set.prototype.add(value)
:添加某个值,返回 Set 结构本身。Set.prototype.delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。Set.prototype.has(value)
:返回一个布尔值,表示该值是否为Set
的成员。Set.prototype.clear()
:清除所有成员,没有返回值。
let set = new Set(); set.add(1);set.add(1);set.add(2); set.has(1);//true set.has(2);//true set.add({x:2}); set.add({x:1}); set.add(function(){}); set.add([]); set.has(2)//true console.log(set.size) set.delete(1); set.forEach(point =>{ if(point.x<5){ set.delete(point) } }) console.log(set.size)//3 set.clear(); console.log(set.size)//0
Set里面的很多方法和Map是一样的(包括下面的)。同样对象,函数,数组,都是唯一的地址,
Set含有has判断特殊值
+0,-0是恒定的,还有undefned与undefined,他俩也是不重复的,而NaN 与 NaN 是不恒等,Set会认为他俩相等
Set的遍历方法:
Set.prototype.keys()
:返回键名的遍历器。Set.prototype.values()
:返回键值的遍历器。Set.prototype.entries()
:返回所有成员的遍历器。Set.prototype.forEach()
:遍历 Set的所有成员。
const set = new Set(['a', 'b', 'c']) for (let item of set.keys()) { console.log(item) } // a // b // c for (let item of set.values()) { console.log(item) } // a // b // c for (let item of set.entries()) { console.log(item) } // ["a", "a"] // ["b", "b"] // ["c", "c"] // 直接遍历set实例,等同于遍历set实例的values方法 for (let i of set) { console.log(i) } // a // b // c set.forEach((value, key) => console.log(key + ' : ' + value)) // a: a // b: b // c: c
最后对比一下他俩的区别
Set主要还是去重,值唯一,
Map主要是以键值对的形式存在,类似于json,但包含所有数据类型