JavaScript-带键的集合

映射

map对象

一个map对象就是一个简单的键值对映射集合,可以按照数据插入时的顺序遍历所有的元素。

set-存值,size-长度,get-取值,has-是否存在,delete-删除,clear-清除.......

Object和Map的比较

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

1.Object的键均为String类型, 在Map里键可以是任意类型。

2.必须手动计算Object的尺寸,但是可以很容易地获取使用map的尺寸。

3.Map的遍历遵循元素的插入顺序。

4.Object有原型,所以映射中有一些缺省的键。

决定用Map还是Object的三个方法:

1.如果键在运行时才能知道,或者所有的键类型相同,所有的值类型相同,那就使用Map。

2.如果需要将原始值存储为键,则使用Map,因为Object将每个键视为字符串,不管他是一个数字值,布尔值还是任何其他原始值。

3.如果需要对个别元素进行操作,使用Object。

WeakMap对象

WeakMap对象也是键值对的集合。它的键必须是对象类型,值可以是任何类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被GC回收掉。Weak Map提供的接口和Map相同。

与Map对象不同的是,WeakMap的键是不可枚举的。

集合

Set集合

Set对象是一组值的集合,这些值是不可重复的,可以按照添加顺序来遍历。例:

var mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");

mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2

for (let item of mySet) console.log(item);
// 1
// "some text"

数组和集合的转换

可以使用Array.from或展开操作符来完成集合到数组的转换。同样,Set的构造器接受数组作为参数,可以完成从Array到Set的转换。需要重申的是,Set对象中的值不重复, 所以数组转换为集合时,所有重复值都会被删除。

Array.from(mySet);
[...mySet2];

mySet2 = new Set([1,2,3,4]);

Array和Set的对比

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

1.数组中用于判断元素是否存在indexOf函数效率低下。

2.Set对象允许根据值删除元素,而数组中必须是使用基于下标的splice方法。

3.数组的indexOf方法无法找到NaN值。

4.Set对象存储不重复的值,所以不需要手动处理包含重复值的情况。

WeakSet对象

WeakSet对象是一组对象的集合。WeakSet中的对象不可重复且不可枚举。

与Set对象的主要区别由:

1.WeakSet中的值必须是对象类型,不可以是别的类型。

2.WeakSet对象的”weak"指的是,对集合中的对象,如果不存在其他引用,那么该对象将可以被垃圾回收。于是不存在一个当前可用对象组成的列表,所以WeakSet不可枚举。

Map的键和Set的值的等值判断

1.判断使用与===相似的规则

2.-0和+0相等

3.NaN与自身相等(与===有所不同)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值