js字典实现
字典的基本概念
在JavaScript中,字典通常通过对象(Object)或Map数据结构实现。字典是一种键值对(key-value)集合,用于存储和快速检索数据。
使用对象实现字典
对象是JavaScript中最常见的字典实现方式。键通常是字符串或Symbol类型,值可以是任意类型。
const dictionary = {
key1: 'value1',
key2: 'value2'
};
// 添加或修改键值对
dictionary.key3 = 'value3';
// 访问值
console.log(dictionary.key1); // 输出: value1
// 删除键值对
delete dictionary.key2;
使用Map实现字典
ES6引入的Map对象提供了更完善的字典功能,支持任意类型的键,并保留了插入顺序。
const map = new Map();
// 添加键值对
map.set('key1', 'value1');
map.set(42, 'answer');
// 访问值
console.log(map.get('key1')); // 输出: value1
// 检查键是否存在
console.log(map.has(42)); // 输出: true
// 删除键值对
map.delete('key1');
// 获取大小
console.log(map.size); // 输出: 1
字典的遍历
对象和Map都支持多种遍历方式:
// 对象遍历
for (const key in dictionary) {
console.log(key, dictionary[key]);
}
// Map遍历
map.forEach((value, key) => {
console.log(key, value);
});
字典的操作方法
清除所有键值对:
// 对象
Object.keys(dictionary).forEach(key => delete dictionary[key]);
// Map
map.clear();
获取所有键或值:
// 对象
const keys = Object.keys(dictionary);
const values = Object.values(dictionary);
// Map
const mapKeys = [...map.keys()];
const mapValues = [...map.values()];
性能考虑
对于频繁增删和大量数据的场景,Map通常比对象性能更好。对象更适合静态或简单键值对存储。
实际应用示例
实现一个简单的单词计数器:

function wordCounter(text) {
const words = text.toLowerCase().split(/\s+/);
const counter = new Map();
words.forEach(word => {
const count = counter.get(word) || 0;
counter.set(word, count + 1);
});
return counter;
}
const result = wordCounter("Hello world hello");
console.log([...result]); // 输出: [["hello", 2], ["world", 1]]
注意事项
使用对象作为字典时,原型链上的属性可能意外出现在遍历中,可使用Object.create(null)创建纯净对象。Map则没有这个问题,且键的顺序是有保证的。






