JavaScript Enum via String access

JavaBeginner

Ensign
Registriert
Juli 2015
Beiträge
142
Hey, ich versuche mich momentan weiter in Javascript einzuarbeiten und bin nun bei Enums hängen geblieben.
Ich habe keine funktionierende Methode im Netz gefunden wie ich über einen String einen Enum-Wert bekommen kann.
Code:
var DaysEnum = {"Wert1":"Banane", "Wert2":"Apfel"};
var str = "Wert1";
console.log(DaysEnum.str);
Gibt mir keinen gültigen Wert zurück. Ich habe etwas von folgender Methode gelesen:
Code:
var DaysEnum = {"Wert1":"Banane", "Wert2":"Apfel"};
var str = "Wert1";
console.log(DaysEnum.[str]);
welche jedoch einen Fehler ausgibt. Wie geht man hierbei genau vor?
 
Code:
DaysEnum[str]
 
  • Gefällt mir
Reaktionen: Madman1209 und JavaBeginner
So etwas geht natürlich auch :):
Javascript:
var myArray = {green:"00FF00", red:"FF0000", blue:"0000FF"};
for (var i = 0, x = Object.keys(myArray).length; i < x; i++) {
  var myKey = Object.keys(myArray)[i]; // green, red, blue
  var myValue = myArray[myKey]; // 00FF00, FF0000, 0000FF
  console.log("Key: " + myKey + ", Value: #" + myValue);
};

Output:
Code:
Key: green, Value: #00FF00
Key: red, Value: #FF0000
Key: blue, Value: #0000FF
 
Die Antwort auf seine Frage ist doch ganz einfach, und hat nichts mit Enums oder TS zu tun. QXARE hat es ja schon genannt. Um es kurz zu erklären warum das geht, da der OP ja scheinbar die Hintergründe nicht kennt:

Code:
// Wenn du ein Objekt hast, z.B
var object = {
    property1: "abc",
    property2: "def"
}
// Dann funktioniert
var x = object.property1
var y = object["property1"]
// Oder eben
var w = "property1"
var z = object[w]
Hinter dem Punkt muss der Name einer property des Objekts stehen! In [] muss der Name als string stehen. Wenn der Name also in einer variable steht, dann musst du das natürlich in [] setzen, da die Variable ein string ist ;)

Edit: Aber ja, Typescript is toll, ersetzt jedoch kein JS, und da lag ja das Problem vom OP.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: JavaBeginner und Madman1209

Ähnliche Themen

Antworten
19
Aufrufe
1.229
Zurück
Oben