在 ES6 中,新增了 Set 和 Map 两种数据结构。它们的引入不仅可以提升代码的可读性,而且对于某些场景下,也可以提高运行效率。本文将详细介绍 Set 和 Map 这两种数据结构的使用方法以及它们的优点。
Set
Set 可以看作是一组无序且唯一的值的集合,其中每个值只能出现一次。值可以是任何类型,包括基本类型和对象引用类型。Set 有以下特点:
- 唯一性:Set 中不会出现重复的值。
- 无序性:Set 中的值没有顺序之分。
- 操作简单:可以进行添加、删除、查找等操作。
Set 的基本用法
创建一个 Set:
let set = new Set();
向 Set 中添加元素:
set.add('a'); set.add('b'); set.add('c');
删除 Set 中的元素:
set.delete('a');
清空 Set:
set.clear();
查找 Set 中是否有某个元素:
set.has('a');
获取 Set 中元素的数量:
set.size;
遍历 Set:
set.forEach(function(value) { console.log(value); }); for (let value of set) { console.log(value); }
Set 的优点
使用 Set 有以下优点:
- 去重:Set 的特点是保证其中的元素唯一,对于重复的数据可以避免重复存储。
- 更加清晰的语义:与操作数组相比,使用 Set 可以清晰地表达出“去重”的含义。
- 数据存储更安全:数据存储在 Set 中,不能通过索引访问,避免了数据被恶意篡改的可能。
需要注意的点
在使用 Set 时需要注意以下几点:
- Set 中 NaN 与自身相等。因此,Set 中只能放入一个 NaN。
- Set 内部使用 Same-value-zero equality(同值相等算法)来判断是否相等,与双等号(==)运算符不同。因此当需要特判类型判断时,使用 Set 是更加安全的选择。
- 对象的相等判断是基于引用地址判断的,即使两个对象的值相同,它们在 Set 中也是不相等的。
Map
Map 可以被看作是一组键值对的有序列表,其中每个键值对都是唯一的。值可以是任何类型,包括基本类型和对象引用类型。Map 有以下特点:
- 唯一性:Map 中的键值对是唯一的。
- 有序性:Map 中的键值对是有序的。
- 操作简单:可以进行添加、删除、查找等操作。
Map 的基本用法
创建一个 Map:
let map = new Map();
向 Map 中添加键值对:
map.set('a', 1); map.set('b', 2); map.set('c', 3);
删除 Map 中的键值对:
map.delete('a');
清空 Map:
map.clear();
查找 Map 中是否有某个键:
map.has('a');
获取 Map 中键值对的数量:
map.size;
遍历 Map:
map.forEach(function(value, key) { console.log(key + ' => ' + value); }); for (let [key, value] in map) { console.log(key + ' => ' + value); }
Map 的优点
使用 Map 有以下优点:
- 字典形式存储数据:Map 可以被看作一种字典形式的数据存储,对于需要使用“键-值”对存储的需求,Map 可以极大地简化代码实现。
- 可以使用任何类型作为键和值:Map 中可以使用任何类型作为键和值,这使得 Map 很容易使用,并且可以灵活地处理各种情况。
需要注意的点
在使用 Map 时需要注意以下几点:
- 因为 Map 中的键值对是唯一的,因此添加重复键值对时会覆盖原有的键值对。
- 对象的相等判断是基于引用地址判断的,即使两个对象的值相同,它们在 Map 中也是不相等的。
Set 和 Map 的使用场景
Set 和 Map 的优点适用于以下场景:
- 数据去重:对于需要保证数据唯一性的场景,使用 Set 可以轻松去除重复数据。
- 数据存储:对于键值对存储的场景,使用 Map 可以简单地存储键值对。
总结
Set 和 Map 是 ES6 中引入的两种非常实用的数据结构。它们的使用不仅可以提高代码的可读性,而且在一些场景下还可以提升运行效率。在实际开发过程中,我们应该灵活使用它们,以达到更好的开发效果。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6537634b7d4982a6ebfe208a