J'avais besoin d'utiliser un objet comme clé pour ma carte, j'ai donc étendu la classe map qui stringifie l'objet transmis comme indiqué ci-dessous
class CoordMapper extends Map { set = (k: ISquareCoordinate, v: Array<ISquareCoordinate>) => { const stringifiedKey = JSON.stringify(k) return super.set(stringifiedKey,v) } get = (k: ISquareCoordinate) => { const stringifiedKey = JSON.stringify(k) return super.get(stringifiedKey) } }
D'après ce que j'ai compris, les clés(), les valeurs() et les entrées() sont des méthodes génératrices qui me permettent de faire quelque chose de similaire
* keys() { const keysArr = [...super.keys()] for (const key of keysArr){ yield JSON.parse(key) } }
Mais cela m'amène à charger toutes les clés que je souhaite éviter, existe-t-il une meilleure façon ?
Modifier : Bien que Map ait des objets comme clés, il vérifie uniquement les objets par référence. Donnez un exemple
let newMap = Map() const obj1 = {'a': 1, 'b' :2} newMap.set(obj1, 123) const copyObj1 = {...obj1} console.log(newMap.get(obj1)) //returns 123 console.log(newMap.get(copyObj1)) //returns undefined
J'en ai besoin d'un deuxième console.log
Retour au 123
Juste au cas où quelqu'un trébucherait ici à l'avenir, il existe une Proposition de phase 3 qui, si elle est approuvée, ajoutera du sucre syntaxique aux itérateurs afin que vous puissiez faire des choses comme :
Essayez ceci (cela ne fonctionne pas encore) :
Pas besoin de collecter toutes les valeurs parents dans un tableau, mais parcourez-les directement :
De cette façon, la paresse de l'itérateur est préservée : l'instruction
next()
时,它都会在parentKeyIterator
上调用next()
一次,然后到达yield
est appelée à chaque fois sur l'itérateur étendu, puis mise en pause.