2013-06-23 8 views
5

Chcę utworzyć skrót z elementami DOM jako kluczami. Ilustruje to następujący kod:Używanie elementu jako klucza do skrótu w języku JavaScript

var hash = {}; 
var set = function(element, value) { hash[element] = value; }; 
var get = function(element)  { return hash[element]; }; 

set(document.getElementById('foo'), 'bar'); 
get(document.getElementById('foo')); // returns 'bar' 

Skąd mogę mieć pewność, że mapy hash unikalnej wartości dla każdego Element?
Pamiętaj, że nie mogę użyć nieprzetworzonego ciągu ID jako klucza, ponieważ można przekazać dowolny dowolny kod Element, również bez identyfikatora.

+1

dlaczego miałbyś "document.getElementById' kiedy możesz bezpośrednio użyć' id'? –

+1

@KarolyHorvath Przepraszamy, że był to uproszczony przykład, muszę odłączyć element. –

+0

Możesz sprawdzić [ten wątek na unikatowych tablicach] (http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – Stokedout

Odpowiedz

6

W języku JavaScript do wersji ES 6 tylko klucze mogą być używane jako klucz. Jeśli chcesz użyć elementów DOM, użyj dwóch połączonych list lub obiektu WeakMap. Bonusem tej ostatniej metody jest to, że nie powoduje ona wycieków pamięci.

zastosowana do przykładu:

var hash = new WeakMap(); 
hash.set(document.getElementById('foo'), 'bar'); 
hash.get(document.getElementById('foo')); // returns 'bar' 

As pisania, WeakMap jest obsługiwana tylko przez następujących przeglądarek:

We wszystkich pozostałych przeglądarek, wsparcie WeakMap można osiągnąć poprzez załadowanie WeakMap.js PolyFill.

+3

_ "Ponieważ specyfikacja tej technologii nie jest ustabilizowana, sprawdź tabelę zgodności pod kątem jej użycia w różnych przeglądarkach. Zwróć też uwagę, że składnia i zachowanie eksperymentalnej technologii mogą ulec zmianie w przyszłej wersji przeglądarek w miarę zmian w specyfikacji." _ – gdoron

+1

@ gdoron Polyfill jest dostępny, na przykład [Weakmap.js] (https://code.google.com/p/es-lab/source/browse/trunk/src/ses/WeakMap.js), na wypadek gdybyś się martwił zgodność przeglądarki. –

+0

"Dodatkową zaletą tej ostatniej metody jest to, że nie powoduje ona wycieków pamięci." Twierdzę w tym przypadku, że OP powinien po prostu użyć zwykłej mapy. –

Powiązane problemy