一.Set
1.set数据结构类似于数组,内部值是唯一的不能重复。
2.Set本身是一个构造函数,用来生成 Set 数据结构。
使用set方法进行数组去重:
let a = [1, 1, 2, 3, 3, 2, 5, 4, 6, 5, 4];
let arr = new Set(a);
console.log(arr);//输出:1,2,3,4,5,6
let m = [11, 1, 1, 1, 2, 3, 2, 4];
let m1 = [...new Set(m)];
console.log(m1);//输出:Array(5) [ 11, 1, 2, 3, 4 ]
3.Set 实例的属性
(1)Set.prototype.constructor:构造函数,默认就是Set函数。
(2)Set.prototype.size:返回Set实例的成员总数。
4.Set 实例的方法
(1)Set.prototype.add(value):添加某个值,返回 Set 结构本身。
(2)Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
(3)Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
(4)Set.prototype.clear():清除所有成员,没有返回值。
let sets = new Set([1, 2, 3, 4, 5]);
sets.add('a');//添加
console.log(sets.has('a'));//检测,返回布尔值
console.log(sets.delete('a'));//删除,返回布尔值
sets.clear();//清除所有
console.log(sets);//输出:Set(0)
5.Set实例的遍历
(1)Set.prototype.keys():返回键名的遍历器
(2)Set.prototype.values():返回键值的遍历器
(3)Set.prototype.entries():返回键值对的遍历器
(4)Set.prototype.forEach():使用回调函数遍历每个成员
注意:Set 结构的键名就是键值(两者是同一个值)
let setarr = new Set([1, 2, 3, 4, 5]);
console.log(setarr.keys());//输出:Set Iterator { }
for (let key of setarr.keys()){
console.log(key);//输出:1 2 3 4 5
}
console.log(setarr.values());//输出:Set Iterator { }
for (let key of setarr.values()){
console.log(key)//输出:1 2 3 4 5
}
console.log(setarr.entries());//输出:Set Iterator { }
for (let key of setarr.entries()){
console.log(key)//输出:Array[key:value]
}
let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value));
二.WeakSet
1.WeakSet 结构与 Set 类似,也是不重复的值的集合。
2.WeakSet 的成员只能是对象,而不能是其他类型的值。
3.WeakSet 是一个构造函数,可以使用new命令创建 WeakSet 数据结构。
4.WeakSet 没有size属性,没有办法遍历它的成员。
//h是一个数组,它有两个成员,也都是数组
//将h作为weak构造函数的参数,h的成员会自动成为weak的成员(并非h数组本身)
let h = [[1, 2], [3, 4]];
let weak = new WeakSet(h);
console.log(weak);//输出:WeakSet {[1, 2], [3, 4]}
5.WeakSet 结构的方法
(1)WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
(2)WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
(3)WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。
let h = [[1, 2], [3, 4]];
let weak = new WeakSet(h);
weak.add({});
weak.add([5, 6]);
let so = {};
weak.add(so);
console.log({} === {});//输出:false
console.log(weak.has([5, 6]));//输出:true
console.log(weak.has(so));//输出:true
console.log(weak);