ES6中的键值对集合

键值对集合

Set集合

Set对象是值的集合,可以按照插入的顺序迭代它的元素。Set 集合中的元素只会出现一次,即Set集合中的元素是唯一的。

const set = new Set([1,2,3,4,5]);

ES6提供了Set构造函数,创建Set对象

Set集合 - 值(唯一的)的集合

应用 - 利于 Set 集合为数组元素去重

const arr = [1, 2, 3, 4, 5, 5];
let set = new Set(arr);
console.log(set);

NAN,undefuned,null等值允许被存储在Set集合中

NAN,undefuned,null值在Set集合中被认为是相等的

console.log(undefined === undefined); //true
let set2 = new Set([NaN, NaN, undefined, undefined, null, null]);
console.log(set2); //Set(3) { NaN, undefined, null }

Set集合的属性与方法

属性

Set 对象提供了size属性用于返回Set 对象的值的个数,Set的size属性相当于数组中的length属性.

const set = new Set([1, 2, 3, 4, 5]);
//Set的size属性相当于数组中的length属性
console.log(set.size);
操作方法

add(value) : 向Set集合的结尾添加新的元素,返回值 - 添加新的元素后的Set集合

var result = set.add(6);
console.log(set, result); // Set { 1, 2, 3, 4, 5, 6 } Set { 1, 2, 3, 4, 5, 6 }

delete(value) - 从Set集合删除指定元素

  • value - 表示Set集合中的元素内容(值)
  • 返回值 - 布尔值,true表示删除成功,false表示删除失败
var result = set.delete(6);
console.log(set, result); // Set { 1, 2, 3, 4, 5 } true

has(value) - 判断指定Set集合中是否包含指定元素

  • value - 表示Set集合中的元素内容(值)
  • 返回值 - 布尔值,ture表示包含,false表示不包含
var result = set.has(1);
console.log(result);//true

clear():清空集合

set.clear()
console.log(set)//Set(0) {}
遍历方法

values()方法 :返回一个迭代器对象([Set Iterato])

  • 没有length属性值 - 常规的循环语句无法使用
  • 不能使用for…in 循环语句
  • 只能使用for …of

keys() 方法 :返回的当前Set集合中所有键的迭代器对象

entries()方法: 返回的当前Set集合中所有键值的迭代器对象

console.log(set.entries()); // [Set Entries] { [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ] }

set集合的特殊- set集合中键与值相同

forEach()方法:

作用 - 用于遍历当前的Set集合(为Set集合中每个元素调用callback函数)

回调函数function (value, key, set) {}

  • value - 表示当前Set集合中每一个值
  • key - 表示当前Set集合中每一个键
  • set - 表示当前遍历的Set集合
set.forEach(function (value, key, set) {
  console.log(value, key, set);
});

Set集合与Array对比

一般情况下,在 JavaScript中使用数组来存储一组元素,而新的集合对象有这些优势:

  • 数组中用于判断元素是否存在的indexOf()函数效率低下。
  • Set 对象允许根据值删除元素,而数组中必须使用基于下标的splice()方法。数组的indexOf()方法无法找到NaN值。
  • Set 对象存储不重复的值,所以不需要手动处理包含重复值的情况。

WeakSet 是什么

WeakSet对象是一些对象值的集合,并且其中的每个对象值都只能出现一次。WeakSet 对象与Set 对象的区别主要有两点:

  • WeakSet对象中只能存放对象引用,不能存放值。而Set对象都可以。
  • WeakSet对象中存储的对象值都是被弱引用的。如果没有其他的变量或属性引用这个对象值,则这个对象值会被当成垃圾回收掉。正因为这样,WeakSet对象是无法被枚举的,没有办法拿到WeakSet集合包含的所有元素。

Map集合是什么

Map集合是键值对的集合。任何值都可以作为Map 集合中的键或值。Map 集合可以按照插入的顺序迭代它的元素。

Map 对象提供了size 属性用于返回Map对象的键值对的个数。
Map 对象提供了用于操作Map 集合的方法和用于遍历Map集合的方法,如下表所示:

在这里插入图片描述

Map集合与Object对比

一般情况下,Object 会被用于将字符串类型映射到数值。Object 允许设置键值对、根据键获取值、删除键、检测某个键是否存在。而Map具有更多的优势:

  • Object的键均为String类型,在Map里键可以是任意类型。
  • 必须手动计算 Object的尺寸,但是可以很容易地获取使用Map 的尺寸。Map 的遍历遵循元素的插入顺序。
  • Object有原型,所以映射中有一些缺省的键。

WeakMap 集合是什么

WeakMap对象也是键值对的集合。它的键必须是对象类型,值可以是任意类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被回收掉。WeakMap 提供的接与Map相同。
与Map对象不同的是,WeakMap 的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值