Set对象和Map对象的区别和用途【JavaScript】
引言:
在 JavaScript 中,Set 对象和 Map 对象都是 ES6 引入的新数据结构,它们各自有不同的用途和特点。
Set 对象:
用途:
Set对象用于存储一组唯一的值。它不允许有重复的元素,因此非常适合用于数组去重、集合运算(如并集、交集和差集)等场景。
特点:
- Set对象中的值是唯一的,尝试添加已存在的值会被忽略。
- Set对象中的值可以是任何类型,包括原始值和对象引用。
- Set对象中的值是无序的,但通常在现代JavaScript引擎中,它们会保持插入顺序。
常用方法:
- add(value): 向Set中添加一个值。
- delete(value): 从Set中删除一个值。
- has(value): 检查Set中是否包含某个值。
- clear(): 清除Set中的所有值。
- size: 返回Set中元素的数量。
示例:
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重复添加,不会生效
console.log(mySet); // Set { 1, 2 }
Map对象:
用途:
Map对象用于存储键值对,其中键可以是任何类型,包括对象、函数等。它适用于需要根据键快速查找和访问值的情况,如缓存、字典、关联数组等。
特点:
- Map对象中的键是唯一的,但不同的键可以对应相同的值。
- Map对象中的键和值都可以是任何类型,提供了比传统对象更灵活的键值对存储机制。
- Map对象会记住键的原始插入顺序,因此迭代时会按照插入顺序返回键值对。
常用方法:
- set(key, value): 向Map中添加一个键值对。
- get(key): 根据键获取对应的值。
- delete(key): 根据键删除一个键值对。
- has(key): 检查Map中是否包含某个键。
- clear(): 清除Map中的所有键值对。
- size: 返回Map中键值对的数量。
示例:
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
console.log(myMap.get('key1')); // 'value1'
console.log(myMap); // Map { 'key1' => 'value1', 'key2' => 'value2' }
总结:
Set对象用于存储一组唯一的值,适用于需要排除重复元素的场景。
Map对象用于存储键值对,其中键可以是任意类型,适用于需要根据键快速查找和访问值的情况。