Um von einem Wert (value) den zugehörigen Schlüssel (key) in einem JavaScript-Objekt zu finden, ist folgender Code hilfreich:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Object.prototype.getKey = function(value){ for(var key in this){ if(this[key] == value){ return key; } } return null; }; // ISO 639: 2-letter codes var languageCodes = { DA: 'Danish', DE: 'German', DZ: 'Bhutani', EL: 'Greek', EN: 'English', EO: 'Esperanto', ES: 'Spanish' }; var key = languageCodes.getKey('Greek'); console.log(key); // EL |
Vorsicht:
Die vorgestellte Variante hat ein Problem mit assoziativen Arrays, da durch das Object-Prototyping die „getKey“-Methode zu jedem Objekt (das man mit JavaScript erstellt) gehört. Das führt zu folgendem Nebeneffekt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Object.prototype.getKey = function(value){ for(var key in this){ if(this[key] == value){ return key; } } return null; }; var companies = {}; // Object companies["GD"] = "GameDuell"; companies["HP"] = "Hewlett-Packard Company"; companies["MS"] = "Microsoft"; for(var key in companies){ console.log("Key: "+key+", Type: "+typeof(companies[key])); // Output: // Key: GD, Type: string // Key: HP, Type: string // Key: MS, Type: string // Key: getKey, Type: function | The function has become an element of the object!! } |
Daher sollte man die „getKey“-Methode in einen eigenen „Namespace“ packen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var BN = BN || {}; BN.Utilities = {}; BN.Utilities.getKey = function(value,object){ for(var key in object){ if(object[key] == value){ return key; } } return null; }; var companies = {}; companies["GD"] = "GameDuell"; companies["HP"] = "Hewlett-Packard Company"; companies["MS"] = "Microsoft"; for(var key in companies){ console.log("Key: "+key+", Type: "+typeof(companies[key])); // Output: // Key: GD, Type: string // Key: HP, Type: string // Key: MS, Type: string } var key = BN.Utilities.getKey("GameDuell",companies); console.log(key); // GD |