W JavaScript wszystkie obiekty działają trochę jak hashmapy. Jednak klucze do tych hadmsap muszą być ciągami. Jeśli nie, zostaną przekonwertowane na toString()
. Oznacza to, że:Czy istnieje biblioteka hashmap dla JavaScript?
var a = {foo: 1};
var b = {bar: 2};
var o = {};
o[a] = 100;
o[b]; // 100
JSON.stringify(o); // '{"[object Object]":100}'
że jest, ponieważ toString()
jakiegokolwiek zwykłego przedmiotu jest [object Object]
, wszystkie one zająć taką samą wartość.
Chciałbym utworzyć hashmap gdzie Obiekty o tych samych właściwościach i wartościach odnoszą się do tej samej wartości, ale obiekty o różnych właściwościach lub wartościach odnoszą się do różnych wartości. Czyli:
var a = {foo: 1};
var b = {bar: 2, baz: 3};
var c = {baz: 3, bar: 2};
var hash = new Hash();
hash.set(a, 100);
hash.get(b); // undefined
hash.set(b, 200);
hash.get(b); // 200
hash.get(c); // 200
Moim pierwszym odruchem było wykorzystanie JSON.stringify()
włączyć przedmiotów do strun, ale:
var hash = {};
var b = {bar: 2, baz: 3};
var c = {baz: 3, bar: 2};
hash[JSON.stringify(b)] = 100
hash[JSON.stringify(b)] // 100
hash[JSON.stringify(c)] // undefined
JSON.stringify(b) // '{"bar":2,"baz":3}'
JSON.stringify(c) // '{"baz":3,"bar":2}'
że jest JSON serializacji jest zamówienie zależne.
Czy istnieje dobra biblioteka lub technika do wdrożenia takiej mapy?
Aktualizacja:
równoważnie jest tam dobra funkcja mieszania taka, że:
hash({foo: 1, bar: 2}) == hash({bar: 2, foo: 1})
Tak, potrzebuję trochę pracy, aby być perfekcyjną i odporną na kule, ale myślę, że masz dobry pomysł. – Peeja
@Peeja: Nie jestem pewien, czy można go wykonać, jeśli wciąż spełnia twoje wymagania. Chociaż, w zależności od Twoich konkretnych potrzeb, może to być wystarczająco dobre. – LukeH