Dynamisch access-Objekt-Eigenschaft mit der Variablen
Ich versuche, auf eine Eigenschaft eines Objekts unter Verwendung eines dynamischen Namen. Ist das möglich?
const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; //The idea is to access something.bar, getting "Foobar!"
Siehe auch - Eigenschaft Zugriff: dot-notation vs. Klammern? und Wie füge ich eine Eigenschaft an ein Objekt mit einer variable wie der name?
InformationsquelleAutor RichW | 2010-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten zum Zugriff auf Eigenschaften eines Objekts:
something.bar
something['bar']
Den Wert zwischen den Klammern kann ein beliebiger Ausdruck. Daher, wenn der name der Eigenschaft in einer Variablen gespeichert ist, verwenden Sie die Klammer-notation:
Ein paar mehr Infos, warum dies möglich ist: JS-Objekte sind assoziative arrays, das ist, warum. Weiter Lesen: quirksmode.org/js/associative.html stackoverflow.com/questions/14031368/...
Nein, Sie sind nicht. Arrays sind Objekte, die Erben aus der Ebene JS-Objekt-Prototyp und daher Sie können die Eigenschaften einer go-go-wie jedes Ebene Objekt. Der 'assoziativ' - Verhalten ist mehr Objekt als array wie. Sie können nicht die Iteration der 'assoziativ' - version von einfachen index so ist es nicht die Anzeige von array-ähnliches Verhalten. Sie definieren Ihre 'assoziative' array als {} oder [], und behandeln Sie das gleiche in beiden Fällen, soweit die zufällige Eigenschaft Zugriff betroffen ist.
Nicht sicher, was Ihren Einwand betrifft? Ich habe nicht gesagt, dass JS-Objekte sind arrays?
als ein Hinweis auf die richtige Antwort , Verweis
InformationsquelleAutor Jan Hančič
Dies ist meine Lösung:
Beispiele:
Ausgezeichnete Antwort, siehe auch: stackoverflow.com/questions/37510640/...
Sie hat mich inspiriert, erstellen Sie eine erweiterte version, mit der bracket-Schreibweise & property-Namen, der Leerzeichen sowie die Validierung der Eingaben: es.knightnet.org.uk/kb/node-js/get-Eigenschaften
InformationsquelleAutor abahet
In javascript können wir auf mit:
foo.bar
foo[someVar]
oderfoo["string"]
Aber nur der zweite Fall ermöglicht den Zugriff auf Eigenschaften dynamisch:
InformationsquelleAutor Sonique
Folgenden ist ein ES6 Beispiel, wie Sie den Zugriff auf die Eigenschaft eines Objekt mit einer name-Eigenschaft wurde dynamisch generiert durch Verkettung von zwei Zeichenfolgen.
Dies wird als berechnete Eigenschaftsnamen
InformationsquelleAutor zloctb
Können Sie dies erreichen durchaus ein paar verschiedene Möglichkeiten.
Die Klammer-notation ist besonders kraftvoll, da es lässt Sie Zugriff auf eine Eigenschaft basierend auf einer Variablen:
Verlängert werden kann, um Schleifen über jede Eigenschaft eines Objekts. Dies kann redundant durch neuere JavaScript-Konstrukte wie for......, aber hilft bei der Veranschaulichung eines use-case:
Beide Punkt-und-Klammer-notation auch wie erwartet funktionieren verschachtelte Objekte:
Objekt destructuring
Könnten wir auch überlegen, Objekt destructuring als Mittel zum Zugriff auf eine Eigenschaft in einem Objekt, sondern wie folgt:
InformationsquelleAutor Gorka Hernandez
AKTUALISIERT
Habe ich die Kommentare unten berücksichtigt und vereinbart. Eval ist zu vermeiden.
Root-Zugriff die Eigenschaften im Objekt ist leicht zu erreichen mit
obj[variable]
, aber immer geschachtelte erschwert die Sache. Nicht zu schreiben, bereits geschriebenen code, schlage ichlodash.get
.Beispiel
Lodash Holen kann verwendet werden, auf verschiedene weisen, hier ist der link zu der Dokumentation lodash.erhalten
eval
Wann immer möglich. stackoverflow.com/questions/86513/...Mit
eval
für so etwas triviales wie der Zugriff auf Eigenschaften ist schlicht overkill und kaum ratsam, unter allen Umständen. Was sind "Schwierigkeiten"?obj['nested']['test']
funktioniert sehr gut und erfordert nicht die embed-code in strings.eval ist drei mal langsamer sind oder mehr, ich würde nicht empfehlen dies für Neulinge, weil es könnte Sie lehren, schlechten Gewohnheiten. Ich benutze
obj['nested']['value']
- denken Sie daran, Kinder, eval ist evil!Er ist jetzt der einzige bringen wollen, Lodash
_.get
auf den Tisch. Ich denke, diese Antwort verdient jetzt upvotes anstatt downvotes. Es kann overkill, aber es ist gut zu wissen, dass es existiert.Vielen Dank für die Einführung von lodash. Ich kam hier durch google auf der Suche nach einer Methode um einen Wert Tiefe in einem Objekt und verwendet Ihre _.set-Methode (die ist identisch zu oben, aber mit dem zusätzlichen argument für den Wert zu setzen).
InformationsquelleAutor Mr Br
Können Sie es tun, wie dies mit Lodash bekommen
InformationsquelleAutor shalonteoh
Wird es interessant, wenn man Parameter übergeben, um diese Funktion auch.
Code jsfiddle
InformationsquelleAutor Jacksonkr
Sollten Sie verwenden
JSON.parse
, werfen Sie einen Blick auf https://www.w3schools.com/js/js_json_parse.aspInformationsquelleAutor onmyway133
foo
ist bereits ein string, so`${foo}`
ist genau das gleiche wiefoo
. (Auch, Ihren code zu haben scheint einige zusätzliche Schrägstriche, die dort nicht hingehört. Aber es wäre doch sinnlos, auch wenn Sie Feste syntax Fehler.)InformationsquelleAutor Sergey