Necesito hacer un conjunto de matrices. El conjunto predeterminado de Javascript no funciona con matrices, por lo que agregué esta nueva clase de 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());
}
}
¿Hay alguna forma de editar esta clase para obtener valores como matriz?
Corrientemente:
const set = new ArraySet()
set.add([1,1])
set.add([2,1])
set.forEach(e => console.log(typeof(e)))
# string
# string
Esperado:
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
combinando algunas de las sugerencias que tal vez podría salirse con la suya sin necesidad de anular la parte del iterador y simplemente controlar lo que sucede dentro del conjunto de esa manera
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))
}
}
esto trataría [1, 2] , [2, 1] , [2, 1, 1] como objetos diferentes. Si no quiere eso, considere un conjunto de conjuntos tal vez o cree una clave a partir de matrices ordenadas