ES6集合

导言

ES6提供的了几个新的数据结构(集合)Set、Map、WeakSet 、WeakMap,下面我来分析一下它们的不同

Set集合

他类似于数组,但是他的成员的值具有唯一性,没有重复的值

  • 特点
    • 1.Set本身是一个构造函数,能够使用new关键字创建
    • 2.Set数据类型里面的值具有唯一性
var set = new Set([1,2,3,2,1]);
console.log(set)//[1,2,3]
  • 注意:Set集合只能接受可迭代的数据作为初始化数据(只有数组和字符串以及伪数组),对象不可以。
var li = document.getElementsByTagName("li");
var lis = new Set(li);
console.log(lis);//Set(8) {li, li, li, li, li, …}
var obj = {
    name : "杨洋",
    age : 16,
    sex : "女"
}
var set = new Set(obj);
console.log(set);

在这里插入图片描述

  • 应用:
    • 数组去重:扩展运算符和 Set 结构相结合,就可以去除数组的重复成员。
var arr = [3, 5, 2, 2, 5, 5];
var unique = [...new Set(arr)];
console.log(unique);//[3,5,2]
  • 属性和原型方法(实例方法)
    • add() 添加重复的数据无效
      • 注意:set在封装时,对+0和-0做了处理,使他们相等,其他的数据都是按照Object.is()来判断的
    • has() 是否存在某个数据
    • delete() 返回是否删除成功
    • clear() 清空
    • keys() 返回键名
    • values() 返回键值
    • size属性 数据个数,只读
    • forEach
    • 三个参数 item index s
      • index不是下标,set集合中没有下标,
      • index和item相同,都表示set中的每一项
    • 遍历 for of

WeakSet

  • 作用:使用该集合,可以实现和set一样的功能
  • 与set不同
    • 内部存储地址不会影响垃圾回收
    • 只能添加对象
    • 不能遍历,不是一个可迭代的对象,没有size属性,没有forEach方法
var wset = new WeakSet();
wset.add({"name" : "丽丽"});
wset.add(1);//报错
wset.add([1,2,3])
console.log(wset);

在这里插入图片描述

Map集合

类似于对象, 也是键值对的集合,但是键不仅限于字符串,各种类型都可以当做键,提供了**“值-值”**

  • 作用: 用于存放键值对,其中键不能重复(map,映射,即原数组映射成一个新的数组)
  • 属性和方法
    • size 数据个数
    • set() 传递的是键值对,两个参数,键是可以为任意类型的
      • 键不存在,则添加
      • 键存在,则修改
var arr = [1,2,3];
var obj = {
    "name" : "丽丽",
    "age" : 15
}
var map = new Map();
map.set(arr,"你好,数组");
console.log(map);//{Array(3) => "你好,数组"}
map.set(obj,"你好,对象");
console.log(map);//{Array(3) => "你好,数组", {…} => "你好,对象"}
  • get() 根据一个键,获取键对应的属性
var map = new Map([
    ["name","李白"],
    ["age",30],
    ["type","诗人"],
    ["作品","静夜思"]              
])
console.log(map);//Map(4) {"name" => "李白", "age" => 30, "type" => "诗人", "作品" => "静夜思"}

console.log(map.get("name"));//李白
  • 其他方法和Set的方法一样

四、WeakMap

1、作用:与Map结构类似,也是用于生成键值对的集合,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。
2、与Map的区别

  • 不接受基本类型的值作为键名
  • 没有keys、values、entries(没有遍历操作)和size方法和属性
  • 无法清空,即不支持clear方法。

3、WeakMap只有以下四个方法可用:
get()、set()、has()、delete()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值