J
j-l-n
Guest
Ich möchte durch folgendes Skript einen String nach der Art "margin: auto; text-align: center; -webkit-border-radius: 2px" in ein Objekt (obj.margin = "auto" und so weiter) umformen.
Dies geschieht in 3 Schritten: Trennen nach dem Strichpunkt, Schleife durch die einzelnen Zuordnungen, Schleife durch die Keys, um bspw. "text-align" in "textAlign" umzunennen.
Allerdings bleibt bei folgendem Script der Browser hängen und verbraucht etliche hundert MB Arbeitsspeicher. Warum?
Dies geschieht in 3 Schritten: Trennen nach dem Strichpunkt, Schleife durch die einzelnen Zuordnungen, Schleife durch die Keys, um bspw. "text-align" in "textAlign" umzunennen.
Allerdings bleibt bei folgendem Script der Browser hängen und verbraucht etliche hundert MB Arbeitsspeicher. Warum?
Code:
var style = "margin: auto; text-align: center; -webkit-border-radius: 2px";
var styles = style.split(";");
var obj = {};
for(var i = 0; i < styles.length; i++){
var styleAssignement, assignementKey, assignementValue, keyParts;
styleAssignement = styles[i].split(":"); //split key from value
if(styleAssignement.length === 2){
assignementKey = styleAssignement[0].trim();
assignementValue = styleAssignement[1].trim();
keyParts = assignementKey.split("-"); //split keys containing a minus
for(var x = 0; x < keyParts.length; x++){ //convert keys containing a minus to camel case (e.g. "background-color" -> "backgroundColor")
var keyPart = keyParts[x];
if(keyPart !== ""){
if(!keyInCamelCase){
var keyInCamelCase;
keyInCamelCase = keyPart;
}
else{
keyInCamelCase += keyPart.charAt(0).toUpperCase() + keyPart.substr(1, keyPart.length); //remove first char and add it again capitalized
}
}
}
if(keyInCamelCase){
assignementKey = keyInCamelCase;
}
if(assignementValue !== ""){
obj[assignementKey] = assignementValue;
}
}
}
console.log(obj);