如何覆盖Javascript/Typescript Set迭代器或值



我需要做一组数组。Javascript的默认Set不适用于数组,所以我添加了这个新的Typescript类:

export class ArraySet extends Set<any> {
override add(arr: any): any {
super.add(arr.toString());
}
override has(arr): boolean {
return super.has(arr.toString());
}
}

有没有一种方法可以编辑这个类,以便将值作为数组??

目前:

const set = new ArraySet()
set.add([1,1])
set.add([2,1])
set.forEach(e => console.log(typeof(e)))
# string 
# string

预期:

const set = new ArraySet()
set.add([1,1])
set.add([2,1])
set.forEach(e => console.log(typeof(e)))
# object       # because I want the element to be the array 
# object

结合一些建议,您可能不需要覆盖迭代器部分,只需像一样控制集合内部的内容

class ArrayNumberSet extends Set<number[]> {
private readonly keyMap: Map<string, number[]> = new Map();
private key(value: number[]): string {
return JSON.stringify(value);// or value.toString()
}
override add(value: number[]): this {
const key = this.key(value);
const old = this.keyMap.get(key);
if (old) {
this.delete(old);
}
this.keyMap.set(key, value);
super.add(value);
return this;
}
override clear(): void {
this.keyMap.clear();
super.clear();
}
override delete(value: number[]): boolean {
const key = this.key(value);
const old = this.keyMap.get(key);
if (old) {
this.keyMap.delete(key);
return super.delete(old);
}
return false
}
override has(value: number[]): boolean {
return this.keyMap.has(this.key(value))
}
}

这将把[1, 2][2, 1][2, 1, 1]视为不同的对象。如果你不想这样,可以考虑一组集合,或者从排序数组中构建一个密钥

最新更新