在 ES6 中,提供了两种新的数据结构:Map 和 Set。Map 对象是一个简单的键/值映射,而 Set 对象是一种集合类型,其中每个值只能出现一次。本篇文章将深入探讨这两种数据结构的详细用法。
Map 数据结构
Map 对象是一个无序的键值对,其中键可以是任何类型(包括 undefined),值也可以是任何类型。它比普通对象有很多优点:
- 对于普通对象,键只能是字符串或 Symbol 类型,而 Map 的键可以是任何类型;
- Map 的键值对可以遍历且顺序是按照插入顺序保证的;
- 可以很容易地获取到 Map 中键值对的数量。
下面是 Map 对象的基本操作示例:
// javascriptcn.com 代码示例 // 创建一个空 Map const myMap = new Map(); // 向 Map 中添加键值对 myMap.set('key1', 'value1'); myMap.set('key2', 'value2'); myMap.set('key3', 'value3'); // 获取 Map 中的值 console.log(myMap.get('key1')); // "value1" // 判断 Map 中是否包含某个键 console.log(myMap.has('key2')); // true // 获取 Map 中键值对的数量 console.log(myMap.size); // 3 // 遍历 Map 中的键值对 for (let [key, value] of myMap) { console.log(`${key} => ${value}`); } // "key1 => value1" // "key2 => value2" // "key3 => value3"
需要注意的是,Map 对象的键值对顺序是按照插入顺序保证的。如果需要按照其它顺序遍历键值对,可以使用 keys()
、values()
和 entries()
方法得到对应的迭代器,然后使用迭代器中的方法进行排序和筛选。
Set 数据结构
Set 对象是一个集合,集合中的元素按照插入顺序进行排序且唯一。 Set 对象也有很多优点:
- 集合中的元素唯一,不会重复出现;
- 可以很容易地获取集合中元素的数量;
- 可以很容易地求两个集合的交、差和并集。
下面是 Set 对象的基本操作示例:
// javascriptcn.com 代码示例 // 创建一个空 Set const mySet = new Set(); // 添加元素到 Set 中 mySet.add(1); mySet.add(2); mySet.add(3); mySet.add(2); // 添加重复元素 // 获取 Set 中元素的数量 console.log(mySet.size); // 3 // 判断 Set 中是否包含某个元素 console.log(mySet.has(2)); // true // 遍历 Set 中的元素 for (let item of mySet) { console.log(item); } // 1 // 2 // 3 // 求两个 Set 的交集、并集和差集 const set1 = new Set([1, 2, 3]); const set2 = new Set([2, 3, 4]); const intersectionSet = new Set([...set1].filter(item => set2.has(item))); console.log(intersectionSet); // Set {2, 3} const unionSet = new Set([...set1, ...set2]); console.log(unionSet); // Set {1, 2, 3, 4} const differenceSet = new Set([...set1].filter(item => !set2.has(item))); console.log(differenceSet); // Set {1}
需要注意的是,Set 对象中的元素唯一且按照插入顺序进行排序。如果需要按照其它顺序遍历元素,可以使用 values()
方法得到一个迭代器,然后使用迭代器中的方法进行排序和筛选。
总结
在 JavaScript 中使用 Map 和 Set 数据结构可以帮助我们更加高效地处理数据。Map 数据结构可以处理键值对,Set 数据结构可以处理集合。两者都有很多优点,然而,在实际应用中,需要根据实际情况选择应该使用哪种数据结构。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652dd2177d4982a6ebef32bf