JavaScript中的数据结构-Set与Map

2024-07-05 22:44:06 浏览数 (3)

在 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);
}

0 人点赞