On languages such as Haskell
, most datatypes have instances which allow their values to be used as keys of structures such as Maps
.
È lo stesso in ECMAScript. Qualsiasi oggetto, incluse le primitive, può essere utilizzato come chiave in un Map
. Anche NaN
, anche se NaN !== NaN // true
fa la cosa giusta e può essere ragionevolmente utilizzato come chiave in Map
.
JavaScript has reasonably fast maps, there called objects, but those only accept string keys.
Accettano anche le Symbol
chiavi.
Inoltre, ECMAScript ha anche un tipo di dati Map
nativo.
Is there any conceptual issue, or anything else to be worried of, in using JSON strings as keys of objects in order to emulate what Haskell does?
Diversi oggetti possono avere la stessa rappresentazione JSON e lo stesso oggetto può avere più rappresentazioni JSON.
La soluzione più semplice sarebbe utilizzare il tipo di dati standard Map
:
const point = {x: 7, y: 8, z: 9};
const pointColor = new Map();
pointColor.set(point, "blue");
for (let [{x, y, z}, color] of pointColor) console.log('{x: ${x}, y: ${y}, z: ${z}} = ${color}');
// {x: 7, y: 8, z: 9} = blue