js实现字典表
字典表的基本实现
在JavaScript中,字典表通常通过对象(Object)或Map数据结构实现。对象是键值对的集合,键为字符串类型;Map的键可以是任意类型,且保持插入顺序。
使用对象实现字典表:
const dictionary = {
key1: 'value1',
key2: 'value2'
};
// 访问
console.log(dictionary.key1); // 输出: value1
// 添加
dictionary.key3 = 'value3';
// 删除
delete dictionary.key2;
使用Map实现字典表:
const map = new Map();
// 添加
map.set('key1', 'value1');
map.set(123, '数字键'); // 键可以是任意类型
// 访问
console.log(map.get('key1')); // 输出: value1
// 删除
map.delete(123);
字典表的常见操作
遍历字典表(对象):
const dict = {a: 1, b: 2};
// for...in循环
for (const key in dict) {
console.log(key, dict[key]);
}
// Object.keys()
Object.keys(dict).forEach(key => {
console.log(key, dict[key]);
});
遍历字典表(Map):
const map = new Map([['a', 1], ['b', 2]]);
// for...of循环
for (const [key, value] of map) {
console.log(key, value);
}
// forEach方法
map.forEach((value, key) => {
console.log(key, value);
});
字典表的高级用法
使用对象作为字典表时,需要注意原型链可能带来的问题。可以使用Object.create(null)创建无原型的对象:
const safeDict = Object.create(null);
safeDict.key = 'value';
// 不会意外访问到原型属性
console.log(safeDict.toString); // 输出: undefined
Map提供更多实用方法:
const map = new Map();
map.set('a', 1).set('b', 2);
// 检查键是否存在
console.log(map.has('a')); // true
// 获取大小
console.log(map.size); // 2
// 清空
map.clear();
性能比较
对于大量数据的字典操作,Map通常比对象有更好的性能:

- Map的键可以是任意类型,对象只能是字符串或Symbol
- Map直接维护大小,无需像对象需要计算
- Map在频繁增删键值对时性能更好
- Map保持插入顺序,对象不保证属性顺序
// 性能测试示例
const obj = {}, map = new Map();
let n = 1000000;
console.time('Object');
for (let i = 0; i < n; i++) {
obj[i] = i;
}
console.timeEnd('Object');
console.time('Map');
for (let i = 0; i < n; i++) {
map.set(i, i);
}
console.timeEnd('Map');






