Map底层实现、Map-Object性能对比
Map 是一个键值对的集合,和 Object 类似。 Map 做为构造函数,可以通过全局对象获取到。需要
通过 new 操作创建实例对象,直接调用会报错。 Map 构造函数接收一个 iterable 类型的参数,用来初
始化 Map 。
和Object的差异
1.Object 的 key 只能是字符串类型和 Symbol 类型, Map 的 key 可以是任意 javascript 类型
2.Map 的 key 是有序的,迭代时按照插入 key 的顺序, Object 的 key 是无序的。es6 以后
Object 的 key 也是有序的了
3.在频繁增删键值对的场景下, Map 的表现更好, Object 没有做优化
var m1 = new Map([[1,'1'],['name','zhangsan']]) // 任意 javascript 类型作为键值
m1.get('name') // zhangsan // 存在下标不可以使用下标或者直接键值获取value
Map对象的属性
size:用来获取 Map 中的条目数量
Map对象的方法
clear:清空对象中的条目
delete:删除特定的条目
get:获取特定的条目
has:检测是否包含特定的条目
set:设置特定的条目,如果已经包含,就更新该条目
迭代Map对象
entries():返回包含 [key, value] 的迭代器
keys():返回包含 key 的迭代器
values():返回包含 value 的迭代器
forEach():传入迭代处理函数,遍历所有条目
for..of 循环:和 entries() 函数的表现类似,循环内部对迭代器做了处理
注意:
迭代 Map 对象的过程中,新增的键值对可以被访问到。已经访问过的键值对,删除后再次添加进
来,会被再次访问。删除没有访问过的键值对,将不会被访问到。
Set vs Array /Map vs Object性能对比
let i = 0;
let tmp = new Array(200000).fill(null).map(e=>i++);
console.time('array');
tmp.splice(tmp.findIndex(e=> e===190000 ),1);
console.timeEnd('array'); // array: 2.18701171875 ms
let set2 = new Set(tmp)
console.time('set2');
set.delete(199999);
console.timeEnd('set2'); // set2: 0.004150390625 ms
标签:Map,迭代,Object,条目,键值,key,底层
From: https://www.cnblogs.com/brujie/p/16707732.html