js实现map
实现 Map 数据结构
在 JavaScript 中,Map 是一种键值对集合,允许任何类型的值作为键,并保持插入顺序。以下是几种实现方式:
使用 Object 模拟 Map
可以使用普通的 JavaScript 对象来模拟 Map 的基本功能,但需要注意对象键只能是字符串或 Symbol。

class SimpleMap {
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;
}
clear() {
this.items = {};
}
size() {
return Object.keys(this.items).length;
}
keys() {
return Object.keys(this.items);
}
values() {
return Object.values(this.items);
}
}
使用 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
console.log(map.size); // 2
map.delete('key1');
map.clear();
实现可迭代 Map
如果需要自定义可迭代的 Map,可以实现 Symbol.iterator:

class IterableMap {
constructor() {
this.entries = [];
}
set(key, value) {
const existing = this.entries.find(e => e.key === key);
if (existing) {
existing.value = value;
} else {
this.entries.push({ key, value });
}
}
[Symbol.iterator]() {
let index = 0;
const entries = this.entries;
return {
next() {
if (index < entries.length) {
return { value: entries[index++], done: false };
}
return { done: true };
}
};
}
}
性能优化版本
对于大型数据集,可以使用更高效的数据结构:
class OptimizedMap {
constructor() {
this.keys = [];
this.values = [];
}
set(key, value) {
const index = this.keys.indexOf(key);
if (index >= 0) {
this.values[index] = value;
} else {
this.keys.push(key);
this.values.push(value);
}
}
get(key) {
const index = this.keys.indexOf(key);
return index >= 0 ? this.values[index] : undefined;
}
}
使用 WeakMap
如果需要弱引用特性,可以使用 WeakMap:
const weakMap = new WeakMap();
const objKey = {};
weakMap.set(objKey, 'private data');
console.log(weakMap.get(objKey)); // 'private data'
每种实现方式适用于不同场景,原生 Map 在大多数情况下是最佳选择,因为它提供了完整的 API 和良好的性能。






