js数据结构之Map
程序员文章站
2022-03-10 23:23:27
...
1. 定义
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。
键的比较:NaN 是与 NaN 相等的(虽然 NaN !== NaN),剩下所有其它的值是根据=== 运算符的结果判断是否相等。
创建:let map = new Map([iterable])
Iterable 可以是一个数组或者其他 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, ‘one’ ],[ 2, ‘two’ ]])。 每个键值对都会添加到新的 Map。null 会被当做 undefined。例如:
let map = new Map([[1, 2], ['a', 'b']])
console.log(map) // Map(2) {1 => 2, "a" => "b"}
2. Map 和 Object 的比较
Map | Object | |
---|---|---|
意外的键 | Map 默认情况不包含任何键。只包含显式插入的键。 | 一个 Object 有一个原型, 原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。 |
键的类型 | 一个 Map的键可以是任意值,包括函数、对象或任意基本类型。 | 一个Object 的键必须是一个 String 或是Symbol。 |
键的顺序 | Map 中的 key 是有序的。因此,当迭代的时候,一个 Map 对象以插入的顺序返回键值。 | es6之前一个 Object 的键是无序的 |
Size | Map 的键值对个数可以轻易地通过size 属性获取 | Object 的键值对个数只能手动计算 |
迭代 | Map 是 iterable 的,所以可以直接被迭代 | 迭代一个Object需要以某种方式获取它的键然后才能迭代。 |
性能 | 在频繁增删键值对的场景下表现更好。 | 在频繁添加和删除键值对的场景下未作出优化。 |
3. 属性和方法
Map.prototype.size
返回Map对象的键/值对的数量。
Map.prototype.set(key, value)
设置Map对象中键的值。返回该Map对象。
Map.prototype.get(key)
返回键对应的值,如果不存在,则返回undefined。
Map.prototype.delete(key)
如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 false。随后调用 Map.prototype.has(key) 将返回 false 。
Map.prototype.clear()
移除Map对象的所有键/值对 。
Map.prototype.has(key)
返回一个布尔值,表示Map实例是否包含键对应的值。
Map.prototype.entries()
返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 [key, value] 数组。
Map.prototype.keys()
Map.prototype.values()
Map.prototype.forEach(callbackFn[, thisArg])
let map = new Map()
// 新增
map.set(1, 2) // Map(1) {1 => 2}
map.set('a', 'b') // Map(2) {1 => 2, "a" => "b"}
// 获取长度
map.size // 2
// 键是否存在
map.has(1) // true
// 修改
map.set(1,3) // Map(2) {1 => 3, "a" => "b"}
// 查询
map.get('a') // "b"
// 删除
map.delete(1) // true
// 清空
map.clear() // undefined
下一篇: css怎么设置鼠标经过元素显示图片