Ich habe eine Reihe von Objektattributen, die als strichbegrenzte Zeichenfolgen wie "availability_meta.supplier.price"
kommen, und ich muss record['availability_meta']['supplier']['price']
usw. einen entsprechenden Wert zuweisen.Javascript: Konvertieren von Punkttrennzeichenfolgen in verschachtelten Objektwert
Nicht alles ist 3 Ebenen tief: viele sind nur 1 Ebene tief und viele sind tiefer als 3 Ebenen.
Gibt es eine gute Möglichkeit, dies programmgesteuert in Javascript zuzuweisen? Zum Beispiel, ich brauche:
["foo.bar.baz", 1] // --> record.foo.bar.baz = 1
["qux.qaz", "abc"] // --> record.qux.qaz = "abc"
["foshizzle", 200] // --> record.foshizzle = 200
Ich stelle ich mir etwas zusammen hacken könnte, aber ich habe keinen guten Algorithmus im Auge würde so Vorschläge zu schätzen wissen. Ich benutze lodash, wenn das hilfreich ist, und offen für andere Bibliotheken, die das schnell erledigen können.
BEARBEITEN Dies ist auf dem Backend und wird selten ausgeführt, also nicht notwendig, um für Größe, Geschwindigkeit, etc. zu optimieren. In der Tat würde Code Lesbarkeit ein Pluspunkt für zukünftige Entwickler sein.
EDIT 2 Dies ist NICHT das gleiche wie das referenzierte Duplikat. Ich muss nämlich in der Lage sein, diese Zuweisung mehrere Male für das gleiche Objekt durchzuführen, und die "doppelte" Antwort überschreibt einfach die Unterschlüssel jedes Mal. Bitte wieder öffnen!
1. Teilen Sie es mit '.' 2. Verwenden Sie' for'. 3. ??????? 4. PROFIT !!!! 111 – zerkms
Ha ja, es ist alles über diese "???????" Abschnitt – tyler
Angulars ['$ parse'] (https://docs.angularjs.org/api/ng/service/ $ parse) macht das ganz gut. Vielleicht sehen Sie sich den [Quellcode] an (https://github.com/angular/angular.js/blob/master/src/ng/parse.js#L956) für diesen – Phil