Einfache Möglichkeit, um javascript-Objekt multilevel-Eigenschaft?
Ich versuche, erstellen Sie ein javascript-Objekt, wie
var allUserExpiry={};
allUserExpiry[aData.userId][aData.courseId][aData.uscId] = aData;
Aber ich erhalte eine Fehlermeldung wie allUserExpiry[aData.userId]
undefiniert.
Gibt es eine Möglichkeit, wobei ich das einstellen kann multi-level-JS-Objekt-Schlüssel? oder ist es wichtig, dass ich gehen sollte-by-doing -allUserExpiry[aData.userId]={}
, dann allUserExpiry[aData.userId][aData.courseId]={}
?
Bitte lassen Sie mich wissen, wenn es irgendwelche Dienstprogramm verfügbaren Funktionen für das gleiche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keine Möglichkeit, "Multi-Level-Tasten". Sie benötigen zum initialisieren jedes Objekt, bevor Sie versuchen, das hinzufügen von Eigenschaften, um es.
Oder Sie können es tun:
Und Verwendung:
Dieser Ansatz hat viele schwache stellen, aber für den Spaß... 🙂
Warum nicht genau dies tun?
Mithilfe von Berechneten Eigenschaft Namen von ES6, es ist möglich, das zu tun:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names
Ich habe eine ziemlich hacky aber kurz Weg, es zu tun in IE9+, sowie real-Browser.
Gegeben
var path = 'aaa.bbb.ccc.ddd.eee';
wopath
ist das, was Ihr die beabsichtigen, in ein Objekt undvar result = {};
wird, wird das Objekt erstellen{aaa: {bbb: {ccc: {ddd: {eee: {}}}}}
speichern wird das Objekt in
result
., Wie es funktioniert:
split('.')
wandelt die Eingabe in['aaa', 'bbb', 'ccc', 'ddd', 'eee']
reduce(function (...) {...}, result)
läuft über das array erstellt durchsplit
, und für jeden Eintrag wird entlang eines zurückgegebenen Wert zum nächsten. In unserem Fall übergeben wir das neue Objekt, bis nach dem hinzufügen des neuen Objekts mit dem alten. Dies schafft eine Kette von Objekten.reduce
gibt das Letzte Objekt, das Sie zurück in der es, so haben wir zu den vorgegebenenresult
vorher.Diese beruht auf der Verwendung von Referenzen, so wird es nicht sofort klar, wie es funktioniert, wenn Sie erwarten, dass Sie Ihren code erhalten werden, indem jemand anderes und sollte wohl vermieden werden, um ehrlich zu sein, aber es funktioniert zumindest.
Können Sie auch die folgenden Optionen verwenden, um die anfängliche Struktur:
Anderen Ansatz, ohne strings oder ein array als argument.
Aber ich würde es nicht verwenden 🙂 Es ist einfach nur zum Spaß.
Da ich nicht gerne zu viel intelligenten Algorithmus. (Wenn es in dieser Kategorie)
Verwendung von lodash, können Sie dies leicht tun (Knoten existiert und leer ist prüfen, dass Knoten)..
Verwendung:
wird es wieder den Typ boolean.
Verwenden Sie einfach loadash,