JavaScript Map的内部工作原理
Map是一个元素的集合,每个元素存储为键值对。Map对象既可以存储对象,也可以存储原始值作为键或值。在本文中,我们将检查JavaScript中Map的内部工作方式。
Map的内部工作方式
JavaScript中的Map允许存储键值对,提供高效的检索、插入和删除操作。任何数据类型都可以用作键,并且元素的插入顺序得到保留。
Map提供与集合元素数量成线性相关的访问时间,并且根据标准实现。就像集合一样,Map内部以哈希表的形式存储值,搜索的时间复杂度为O(1)。另外,值也可以存储为搜索树或任何其他数据结构,以使搜索的时间复杂度优于O(N)。
严格相等性用于比较键,以确保可靠地检索关联值。当使用值相等性算法进行检索时,NaN被认为与NaN相等,其他相等性根据严格相等运算符确定。
示例: 这个示例展示了在JavaScript中对Map的基本实现。
Javascript
let map1 = new Map([
[1, 2],
[2, 3],
[4, 5],
]);
for (const item of map1) {
console.log(item);
}
输出: 我们可以看到映射中的元素存储顺序与其定义顺序相同,值相等算法在将数据存储到映射中之前会去除重复项。
[1, 2]
[2, 3]
[4, 5]
示例2: 这个示例展示了JavaScript中map的实现。
JavaScript
const mapVal = new Map();
for (let i = 0; i < 1000000; i++) {
mapVal.set([i, i]);
}
const arr = Array.from(Array(1000000), (_, i) => i);
let include = arr.includes(999999)
console.time('map')
console.log(mapVal.has(999999)); // Output: true
console.timeEnd('map')
console.time('Array')
console.log(arr.includes(999999)); // Output: true
console.timeEnd('Array')
输出:
在此示例中,我们将map的has()方法与数组的includes()方法进行了比较。map的has()方法所需的时间少于数组的includes()方法。
false
map: 0.139892578125 ms
true
Array: 0.52294921875 ms
地图的重要性:
- 意外的键和安全性: 没有默认键存储,只包含显式加入的内容。因此,使用地图是安全的。
- 键类型和顺序: 可以使用任何值作为键函数,可以是对象等。顺序是按照插入顺序进行的。
- 大小: 由于有大小属性,可以轻松检索地图的大小。
- 性能: 任何操作都可以在地图上更好地执行。
- 序列化和解析: 我们可以使用JSON.stringify()和JSON.parse()方法为地图创建自己的序列化和解析支持。