Set数据结构----ES6学习笔记

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不能被遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值