在 ES9 中,JavaScript 引入了一种新的数据结构:Map 集合。Map 是一种类似于对象的键值对集合,但也有一些不同之处。本文将介绍 Map 集合的概念、使用方法以及与对象的异同点,以及如何在实际开发中应用 Map 集合。
Map 集合的概念
Map 集合是一种新的数据结构,它可以存储任意类型的键和值,并且无论键的类型是什么,它都是按照插入的顺序存储的。更进一步地,Map 集合还有以下特点:
- 键可以是任意类型,包括数字、字符串、布尔值、对象等;
- 键和值可以为任意类型的组合;
- 键是唯一的,不会出现重复的键;
- 可以通过
get
方法获取值,也可以通过set
方法设置键值对; - 可以使用
size
属性获取集合的大小。
Map 集合的使用方法
创建 Map 集合
创建 Map 集合可以使用 new Map()
,也可以通过传入一个包含键值对的数组来创建 Map 集合,例如:
const map = new Map(); const arr = [[1, 'one'], [2, 'two'], [3, 'three']]; const mapFromArr = new Map(arr);
设置键值对
可以使用 set
方法来设置键值对,例如:
const map = new Map(); map.set(1, 'one'); map.set('2', 'two'); map.set(true, 'boolean');
注意,Map 集合中的键是唯一的。如果多次使用 set
方法设置同一个键,后面的值会覆盖前面的值。
获取值
可以使用 get
方法来获取指定键对应的值,例如:
const map = new Map([['name', 'Alice'], ['age', 20]]); map.get('name'); map.get('age');
删除键值对
可以使用 delete
方法删除指定键值对,例如:
const map = new Map([['name', 'Bob'], ['age', 30]]); map.delete('age');
清空 Map 集合
可以使用 clear
方法清空 Map 集合,例如:
const map = new Map([['name', 'Charlie'], ['age', 40]]); map.clear();
遍历 Map 集合
可以使用 forEach
方法来遍历 Map 集合,例如:
const map = new Map([['name', 'Dan'], ['age', 50]]); map.forEach((value, key) => { console.log(key, value); });
Map 集合和对象的异同点
Map 集合和对象都可以存储键值对,但是它们也有一些不同之处。
相同点
- 都可以使用键值对存储数据;
- 都可以使用
get
方法获取值; - 都可以使用
size
属性获取大小。
不同点
- 对象的键只能是字符串或数字,而 Map 集合的键可以是任意类型;
- 对象中的键值对是无序的,而 Map 集合中的键值对是按照插入的顺序存储的;
- 对象中的键是可以枚举的,即可以使用
for...in
循环遍历,而 Map 集合不可以。
在实际开发中应用 Map 集合
用于缓存数据
Map 集合可以用于缓存数据,如果我们需要在网站中缓存用户的登录信息,可以将用户名和密码存储在 Map 集合中:
const loginCache = new Map(); loginCache.set('Alice', '123456'); loginCache.set('Bob', 'abcdef'); ...
用于计数
Map 集合也可以用于计数,在很多情况下需要统计一些数据的数量,例如统计每个单词出现的次数,可以使用 Map 集合:
// javascriptcn.com 代码示例 const wordCount = new Map(); const str = 'a quick brown fox jumps over the lazy dog'; const words = str.split(' '); words.forEach(word => { if (wordCount.has(word)) { const count = wordCount.get(word); wordCount.set(word, count + 1); } else { wordCount.set(word, 1); } });
总结
Map 集合是 ES9 中引入的一种新的数据结构,可以存储任意类型的键和值,并且按照插入的顺序存储。与对象相比,Map 集合有更广泛的应用场景,并且可以方便地进行键和值的查找、删除和遍历。在实际开发中,Map 集合可以应用于缓存数据、计数等多种场景。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65374f8e7d4982a6ebfc8ddf