在 JavaScript 开发中,数据结构就像是建筑师手中的工具,它们是我们构建高效、稳固且逻辑严密的程序的基石,在ES6中,JavaScript引入了两种新的数据结构Set和Map。这两个对象提供了更高效的方式来存储和处理数据,它们在处理大量数据时比传统的数组或对象更加灵活和强大。
Set
Set 是一种独特的数据结构,它的核心特点是存储唯一的值。这意味着在一个 Set 中,不会存在重复的元素。
原理:Set 内部通过某种哈希算法来确保元素的唯一性和快速查找。
用法示例:
代码语言:js复制let mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重复添加,但 Set 会自动去重
console.log(mySet.size); // 输出 2
实际案例:假设我们正在处理一个用户输入的单词列表,需要去除重复的单词。
代码语言:js复制let wordList = ['apple', 'banana', 'apple', 'orange'];
let uniqueWords = new Set(wordList);
console.log(Array.from(uniqueWords)); // 输出 ["apple", "banana", "orange"]
数组去重
假设我们有一个包含重复项的数组,我们希望去除这些重复项,得到一个由唯一值组成的数组。使用Set,我们可以轻松实现这一点。
代码语言:js复制const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // 输出:[1, 2, 3, 4, 5]
检查值是否存在
在处理用户输入时,我们可能需要检查某个值是否已经存在于一个集合中。使用Set,这个操作非常简单。
代码语言:js复制const mySet = new Set([1, 2, 3, 4]);
console.log(mySet.has(3)); // 输出:true
console.log(mySet.has(5)); // 输出:false
Map
Map 则是一种键值对的数据结构,与普通的对象不同,Map 的键可以是任何类型的值,包括对象。
原理:Map 同样基于高效的哈希算法来实现键值的存储和快速访问。
用法展示:
代码语言:js复制let myMap = new Map();
myMap.set('key1', 100);
myMap.set({ name: 'John' }, 'User Info');
console.log(myMap.get('key1'));
console.log(myMap.get({ name: 'John' }));
存储和访问键值对
Map允许我们存储任何类型的键和值。下面是一个简单的例子,演示如何使用Map来存储和访问键值对。
代码语言:js复制const myMap = new Map();
myMap.set('name', '张三');
myMap.set('age', 25);
myMap.set(1, '数字1');
console.log(myMap.get('name')); // 输出:张三
console.log(myMap.get(1)); // 输出:数字1
遍历Map
Map提供了多种方法来遍历其键值对,包括forEach、keys、values和entries。
代码语言:js复制const myMap = new Map([
['a', 1],
['b', 2],
['c', 3]
]);
// 使用forEach遍历
myMap.forEach((value, key) => {
console.log(key ' => ' value);
});
// 使用keys遍历键
for (let key of myMap.keys()) {
console.log(key);
}
// 使用values遍历值
for (let value of myMap.values()) {
console.log(value);
}
// 使用entries遍历键值对
for (let [key, value] of myMap.entries()) {
console.log(key ' => ' value);
}