Wie gesagt, es bedarf der Iteration. Zum Beispiel, in modernen Browser könnte man haben:
var key = Object.keys(obj).filter(function(key) {return obj[key] === value})[0];
Wo value
enthält den gesuchten Wert. Gesagt, dass, würde ich wahrscheinlich eine Schleife verwenden.
Andernfalls könnten Sie ein richtiges "hashmap"-Objekt verwenden - es gibt mehrere Implementierungen in JS herum - oder implementieren Sie durch Ihre eigenen.
UPDATE 2018
Sechs Jahre sind vergangen, aber ich bekomme immer noch einige Stimmen hier, also denke ich, dass eine modernere Lösung - für moderne Browser/Umgebungen - in der Antwort selbst und nicht nur in den Kommentaren erwähnt werden sollte:
const key = Object.keys(obj).find(key => obj[key] === value);
Natürlich kann es auch eine Funktion sein:
const getKeyByValue = (obj, value) =>
Object.keys(obj).find(key => obj[key] === value);
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