Warum wollen Sie das Attribut auf Camelcase in erster Linie zu konvertieren ..?Just do
function arrayToStructuredObject(obj,props){
if (props.length){
obj[props[0]] = props.length > 1 ? {} : value;
arrayToStructuredObject(obj[props.shift()],props);
}
return obj;
}
var props = "animation-jump-tremendous-pinky".split("-"),
value = "123",
obj = {},
sobj = {};
sobj = arrayToStructuredObject(obj, props);
Neben i erinnern möchte, dass die Klammer-Notation mit einer Eigenschaft zu erstellen ist nur möglich, wenn der Verweis, dass die Halterung Notation auf verwendet wird, wird als Objekt vorgegeben. Wie
var o1; // <- undefined
o1["myProp"] = 1; // Uncaught TypeError: Cannot set property 'myProp' of undefined
während
var o2 = {}; // Object {}
o2["myProp"] = 1; // <- 1
dann wieder
o2["myProp"]["myOtherProp"] = 2; // <- 2 but won't type coerce o2.myProp to Object
So von Vorschlägen gesprochen, bin ich, wenn unter Verwendung von Dirac-Notation direkt über undefinierte Variablen noch nicht sicher, wie eine andere Objekterstellung Muster macht Sinn oder nicht.
Nun, in jedem Fall eine vollständige Lösung wäre
var inp = {"personName" : "Grant", "animationJump" : "123", "fancyGirlTakesARide" : "987"},
result = Object.keys(inp).reduce(function(p,c,i){
var props = c.replace(/[A-Z]/g, m => "-" + m.toLowerCase()).split("-");
return arrayToStructuredObject(p,props,inp[c])
},{});
function arrayToStructuredObject(obj,props,val){
if (props.length){
obj[props[0]] = props.length > 1 ? {} : val;
arrayToStructuredObject(obj[props.shift()],props,val);
}
return obj;
}
sein Obwohl ich von einem Vorgriff der Methode der Aufteilung der Camelcase Requisiten liebte (/?=[A-Z]/
) dauert es eine zusätzliche Aufgabe der unteren Gehäuse der ganze Reihe von Requisitenketten unabhängig davon, ob sie bereits Kleinbuchstaben sind oder nicht. Also ich denke, das könnte etwas schneller sein. (..oder nicht wegen der rekursiven Natur davon)
Sie sollten sich [Schnellste Möglichkeit, verschachtelte JSON-Objekte zu glätten/zu entlasten] (http://stackoverflow.com/q/19098797) ansehen/1048572) – Bergi