文章目录
Set
数据结构使用方法:
理解:ES6新增了set
数据结构,它与数组类似,但是它存储的值必须是唯一的。
一:使用set
完成去重
1.数组去重
//方法1
function mehtod1(arr){
return [...new Set(arr)];
}
//方法2
function method2(arr){
return Array.from(new Set(arr));
}
2.字符串去重
//方法1
function method1(str){
return [...new Set(str)].join("");
}
//方法2
function method2(str){
return Array.from(new Set(str)).join("");
}
Set
去重算法:
Set判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于运算符( === ),主要的区别是该算法认为NaN等于NaN。( === )运算符则认为NaN不等于NaN。
二:set
实例的方法和属性
属性:
Set.prototype.size
:返回set
实例成员总数
操作方法:
Set.prototype.add()
:添加某个值,返回 Set 结构本身。
Set.prototype.delete()
:删除某个值,返回一个布尔值,表示删除是否成功。
Set.prototype.has()
:返回一个布尔值,表示该值是否为Set的成员。
Set.prototype.clear()
:清除所有成员,没有返回值。
遍历方法:
Set.prototype.keys()
:返回键名的遍历器
Set.prototype.values()
:返回键值的遍历器
Set.prototype.entries()
:返回键值对的遍历器
Set.prototype.forEach()
:使用回调函数遍历每个成员
三:实现并集,交集,差集
let a = new Set([1,2,3]);
let b = new Set([4,3,2]);
//并集
let union = new Set([...a,...b]);
//交集
let intersect = new Set([...a].filter(x =>b.has(x)));
//差集
let end = new Set([...a].filter(x =>!b.has(x)));
weakSet数据结构
理解:WeakSet
数据结构与set
数据结构类似,区别是WeakSet
存储的值只能是对象。
let w = new WeakSet();
w.add(1);//TypeError: WeakSet value must be an object
w.add("str");//TypeError: WeakSet value must be an object
上例中,试图向w
中存储数值和字符串,都失败了。WeakSet
数据结构中只能存储对象。
一:weakSet实例的方法
WeakSet.prototype.add(value)
:向 WeakSet 实例添加一个新成员。
WeakSet.prototype.delete(value)
:清除 WeakSet 实例的指定成员。
WeakSet.prototype.has(value)
:返回一个布尔值,表示某个值是否在 WeakSet 实例之中。
const ws = new WeakSet();
const obj = {};
const foo = {};
ws.add(window);
ws.add(obj);
ws.has(window); // true
ws.has(foo); // false
ws.delete(window);
ws.has(window); // false
二:weakSet没有size
属性,不能被遍历
ws.size // undefined
ws.forEach // undefined
ws.forEach(function(item){ console.log('WeakSet has ' + item)})
// TypeError: undefined is not a function
上例中,可以看出,WeakSet不能被遍历。