我被问到一个如何在javascript中实现Set的问题,特别是如何设计一个在ES6中模拟Set的类。底层数据结构应该是什么?
答案 0 :(得分:1)
最简单的方法是使用Map
:
class Set {
constructor(items) {
this._map = new Map(Array.from(items, [v, true]));
}
get size() {
return this._map.size;
}
has(v) {
this._map.has(v);
}
add(v) {
this._map.set(v, true);
}
delete(v) {
this._map.delete(v);
}
clear() {
this._map.clear();
}
*entries() {
for (const k of this._map.keys()) {
yield [k, k];
}
}
keys() {
return this._map.keys();
}
values() {
return this._map.keys();
}
forEach(cb, context) {
for (const k of this._map.keys()) {
cb.apply(context, k, k);
}
}
[Symbol.iterator]() {
return this.values();
}
}