Hashovací tabulky/asociativní pole v JavaScriptu – jak a proč?

JavaScript nemá nativní třídu objektů zvanou „hashovací tabulka“ – to však neznamená, že funkce hashovacích tabulek v jazyce neexistuje. Zde je návod, jak používat hašovací tabulky v JavaScriptu, s funkčním příkladem kódu.

Co je to hash tabulka?

Také známé jako hash mapy hashovací tabulky jsou datovou strukturou, která mapuje seznam klíčů na seznam odpovídajících hodnot pro každý klíč. Jakoukoli hodnotu v tabulce lze získat přístupem přes přidružený klíč.

Hashovací tabulka na pozadí použije hašovací funkci k převedení klíče na index, který lze použít k rychlému vyhledání související hodnoty. To z nich dělá výkonný způsob ukládání pomíjivých dat libovolné délky.

Asociativní pole

Jednou z forem hashovacích tabulek jsou asociativní pole v PHP. Pokud hledáte stejnou funkcionalitu, jakou nabízejí asociativní pole, měl by vám pomoci následující příklad.

Lze objekty JavaScript použít jako hash tabulky?

JavaScriptové objekty lze použít jako hashovací tabulky, ale postrádají některé funkce. Vezměte si například následující objekt:

var myObject = {
    "ACME Plumbing": "123 Fake Street",
    "FOOBAR Pool Services": "198 Pretend Place"
};

Jedná se o jednoduchý objekt ukládající hodnoty z adresáře jako páry klíč/hodnota – název firmy je klíčem a adresa firmy je hodnota.

Zdá se, že to odpovídá definici hashovací tabulky (a technicky třída Object ukládá věci stejným způsobem) – páry klíč-hodnota jsou uloženy a lze je načíst jako vlastnosti objektu, ale existují některé nevýhody.

Třída objektů JavaScript obsahuje spoustu dalších věcí pro manipulaci s objekty. Tyto vlastnosti a metody mohou být v konfliktu s daty, která plánujete uložit do tabulky.

Třída Object také nezná svou vlastní délku, takže je nutné ji iterovat, aby se zjistilo, kolik položek tam je.

Nejdůležitější je, že narazíte na problémy s výčtem hodnot, které jste uložili, v pořadí, v jakém byly uloženy – objekty JavaScript ne vždy při iteraci dodržují pořadí vložení položek v nich.

Osvědčené postupy hashovací tabulky – použití třídy mapy

Objekt Map v JavaScriptu poskytuje plnou funkčnost hashovací tabulky nebo hash mapy. Uchovává páry klíč-hodnota a pamatuje si konkrétní pořadí, ve kterém byly vloženy do tabulky. Navíc vám nedovolí vkládat hodnoty, které jsou v rozporu s jeho vlastními metodami nebo vlastnostmi.

Pokud chcete v kódu použít funkci hashovací tabulky, objekt Map je nejjednodušší způsob, jak toho dosáhnout.

Příklad – Použití mapy k vytvoření hash tabulky

Níže uvedený příklad ukazuje, jak se objekt Map používá k dosažení funkčnosti hash mapy v JavaScriptu:

// Create a Map object
var myMap = new Map();

// Set some key/value pairs
myMap.set("ACME Plumbing", "123 Fake Street");
myMap.set("FOOBAR Pool Services", "198 Pretend Place");

// Retrieve a value by it's key
myMap.get("ACME Plumbing"); // "123 Fake Street"

// Map objects can be easily iterated over to get all values
for (let [key, value] of myMap) {
    console.log(key + ' :  ' + value);
}