js 实现 map
实现 Map 数据结构
在 JavaScript 中,可以通过对象或 ES6 的 Map 类来实现键值对存储。以下是几种实现方式:
使用 ES6 Map
ES6 引入了原生的 Map 类,支持任意类型的键值对存储:

const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
console.log(map.get('key1')); // 输出: value1
console.log(map.has('key2')); // 输出: true
map.delete('key2');
console.log(map.size); // 输出: 1
使用普通对象模拟 Map
如果环境不支持 ES6,可以用普通对象模拟 Map 的功能:

const map = {};
map['key1'] = 'value1';
map['key2'] = 'value2';
console.log(map['key1']); // 输出: value1
console.log('key2' in map); // 输出: true
delete map['key2'];
console.log(Object.keys(map).length); // 输出: 1
自定义 Map 类
可以封装一个简单的 Map 类,实现基本功能:
class CustomMap {
constructor() {
this.items = {};
}
set(key, value) {
this.items[key] = value;
}
get(key) {
return this.items[key];
}
has(key) {
return key in this.items;
}
delete(key) {
if (this.has(key)) {
delete this.items[key];
return true;
}
return false;
}
size() {
return Object.keys(this.items).length;
}
}
const map = new CustomMap();
map.set('a', 1);
console.log(map.get('a')); // 输出: 1
使用 WeakMap
如果需要键是对象且避免内存泄漏,可以使用 WeakMap:
const weakMap = new WeakMap();
const keyObj = {};
weakMap.set(keyObj, 'private data');
console.log(weakMap.get(keyObj)); // 输出: private data
注意事项
- ES6
Map的键可以是任意类型,普通对象的键只能是字符串或 Symbol。 Map维护插入顺序,普通对象不保证顺序。WeakMap的键必须是对象,且不可枚举。
以上方法可根据实际需求选择使用。ES6 Map 是推荐方式,功能最完善。






