在 ES6 中,JavaScript 增加了两个新的数据结构 Map 和 Set,它们分别用于存储键值对和唯一值,可以更方便地处理数据和提高代码效率。本文将详细介绍 Map 和 Set 的使用方法和注意事项,并提供一些示例代码和实际应用场景。
Map 数据结构
Map 是一种键值对的集合,可以用任何数据类型作为键或值,而且键和值之间是一一对应的关系。Map 的优点在于可以快速查找和修改数据,还可以保持插入顺序。下面是创建和使用 Map 的示例代码:
// javascriptcn.com 代码示例 // 创建一个空 Map let map = new Map(); // 设置键值对 map.set('name', 'Tom'); map.set(1, 'one'); map.set(true, 'yes'); // 获取键值对 console.log(map.get('name')); // 输出 "Tom" console.log(map.get(1)); // 输出 "one" console.log(map.get(true)); // 输出 "yes" // 检查键是否存在 console.log(map.has('name')); // 输出 true console.log(map.has(2)); // 输出 false // 删除键值对 map.delete('name'); console.log(map.get('name')); // 输出 undefined // 遍历 Map for (let [key, value] of map) { console.log(key + ' = ' + value); }
Set 数据结构
Set 是一种无序的唯一值集合,可以用任何数据类型作为元素。Set 的优点在于可以快速查找和删除元素,还可以去除重复项。下面是创建和使用 Set 的示例代码:
// javascriptcn.com 代码示例 // 创建一个空 Set let set = new Set(); // 添加元素 set.add('apple'); set.add('banana'); set.add('orange'); set.add('apple'); // 重复元素不会被添加 // 获取元素 console.log(set.has('apple')); // 输出 true console.log(set.has('pear')); // 输出 false // 删除元素 set.delete('banana'); console.log(set.has('banana')); // 输出 false // 遍历 Set for (let item of set) { console.log(item); }
实际应用场景
Map 和 Set 可以用于处理各种数据结构和算法问题,例如:
- 查找和替换字符串中的单词
- 统计数组中每个元素的出现次数
- 判断两个数组是否相等
- 模拟图的遍历和搜索算法
下面是一个使用 Map 和 Set 实现查找和替换字符串中的单词的示例代码:
// javascriptcn.com 代码示例 function replaceWords(s, dict) { let map = new Map(); let set = new Set(dict); let words = s.split(' '); for (let i = 0; i < words.length; i++) { let word = words[i]; if (set.has(word)) { if (!map.has(word)) { map.set(word, 'word' + map.size); } words[i] = map.get(word); } } return words.join(' '); } let s = 'the cat in the hat'; let dict = ['cat', 'hat']; console.log(replaceWords(s, dict)); // 输出 "the word0 in the word1"
总结
Map 和 Set 是 ES6 中新增的数据结构,分别用于存储键值对和唯一值,可以更方便地处理数据和提高代码效率。在实际应用中,可以使用 Map 和 Set 处理各种数据结构和算法问题,提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6551db09d2f5e1655db95190