Hier ist eine Lodash-Lösung für dieses Problem, die für flache Schlüssel => Wert-Objekt, anstatt ein verschachteltes Objekt funktioniert. Der in der akzeptierten Antwort enthaltene Vorschlag zur Verwendung von _.findKey
funktioniert bei Objekten mit verschachtelten Objekten, aber nicht in diesem häufigen Fall.
Bei diesem Ansatz wird das Objekt invertiert, wobei die Schlüssel mit den Werten vertauscht werden, und dann wird der Schlüssel durch Nachschlagen des Wertes im neuen (invertierten) Objekt gefunden. Wenn der Schlüssel nicht gefunden wird, dann false
zurückgegeben wird, was ich gegenüber undefined
aber Sie könnten dies einfach durch den dritten Parameter der Methode _.get
Methode in getKey()
.
// Get an object's key by value
var getKey = function( obj, value ) {
var inverse = _.invert( obj );
return _.get( inverse, value, false );
};
// US states used as an example
var states = {
"AL": "Alabama",
"AK": "Alaska",
"AS": "American Samoa",
"AZ": "Arizona",
"AR": "Arkansas",
"CA": "California",
"CO": "Colorado",
"CT": "Connecticut",
"DE": "Delaware",
"DC": "District Of Columbia",
"FM": "Federated States Of Micronesia",
"FL": "Florida",
"GA": "Georgia",
"GU": "Guam",
"HI": "Hawaii",
"ID": "Idaho",
"IL": "Illinois",
"IN": "Indiana",
"IA": "Iowa",
"KS": "Kansas",
"KY": "Kentucky",
"LA": "Louisiana",
"ME": "Maine",
"MH": "Marshall Islands",
"MD": "Maryland",
"MA": "Massachusetts",
"MI": "Michigan",
"MN": "Minnesota",
"MS": "Mississippi",
"MO": "Missouri",
"MT": "Montana",
"NE": "Nebraska",
"NV": "Nevada",
"NH": "New Hampshire",
"NJ": "New Jersey",
"NM": "New Mexico",
"NY": "New York",
"NC": "North Carolina",
"ND": "North Dakota",
"MP": "Northern Mariana Islands",
"OH": "Ohio",
"OK": "Oklahoma",
"OR": "Oregon",
"PW": "Palau",
"PA": "Pennsylvania",
"PR": "Puerto Rico",
"RI": "Rhode Island",
"SC": "South Carolina",
"SD": "South Dakota",
"TN": "Tennessee",
"TX": "Texas",
"UT": "Utah",
"VT": "Vermont",
"VI": "Virgin Islands",
"VA": "Virginia",
"WA": "Washington",
"WV": "West Virginia",
"WI": "Wisconsin",
"WY": "Wyoming"
};
console.log( 'The key for "Massachusetts" is "' + getKey( states, 'Massachusetts' ) + '"' );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
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