Ich habe die bimap Bibliothek ( https://github.com/alethes/bimap ), die eine leistungsstarke, flexible und effiziente bidirektionale JavaScript-Schnittstelle für Karten implementiert. Es hat keine Abhängigkeiten und kann sowohl auf der Server-Seite (in Node.js können Sie es mit npm install bimap
) und im Browser (durch Verlinkung mit lib/bimap.js ).
Die Grundfunktionen sind wirklich einfach:
var bimap = new BiMap;
bimap.push("k", "v");
bimap.key("k") // => "v"
bimap.val("v") // => "k"
bimap.push("UK", ["London", "Manchester"]);
bimap.key("UK"); // => ["London", "Manchester"]
bimap.val("London"); // => "UK"
bimap.val("Manchester"); // => "UK"
Der Abruf der Schlüssel-Wert-Zuordnung ist in beide Richtungen gleich schnell. Es gibt keine kostspieligen Objekt-/Array-Traversals unter der Haube, so dass die durchschnittliche Zugriffszeit unabhängig von der Größe der Daten konstant bleibt.
0 Stimmen
Es gibt keine Standardfunktion für diese Aufgabe. Wenn die Zuordnung wirklich bidirektional ist, ist es trivial, eine "umgekehrte" Zuordnung zu konstruieren und diese zu indizieren. Andernfalls eine einfache Eigenschaft-Iterator (mit einem hasOwnProperty gaurd, vielleicht) und eine frühe Rückgabe versteckt innerhalb einer Funktion tut gerade schön...
0 Stimmen
Wie könnte das funktionieren, wenn ein Objekt von mehr als einem Schlüssel referenziert wird?
var o = []; var map = {first: o, second: o}
. Was würdefind_key(o)
zurückkehren?5 Stimmen
Spielt keine Rolle ;) Ich wollte es nur für ein Array mit eindeutigen Schlüssel-Wert-Paaren verwenden.
0 Stimmen
Mögliches Duplikat von beste Weg, um den Schlüssel eines Schlüssel/Wert-Javascript-Objekt zu erhalten
1 Stimmen
Ich habe eine Version ohne Iteration erstellt stackoverflow.com/a/36705765/696535 . Es wäre interessant, alle vorgeschlagenen Lösungen in jsfiddle zu testen