Tief ändern der Werte in einem JavaScript-Objekt
Ich habe ein Objekt, das enthält eine unbekannte Anzahl von anderen Objekten. Jedes (sub-)Objekt enthalten können Boolesche Werte als strings und ich möchte Sie zu ändern, um echte Boolesche Werte. Hier ist ein Beispiel-Objekt:
var myObj = {
my1stLevelKey1: "true",
my1stLevelKey2: "a normal string",
my1stLevelKey3: {
my2ndLevelKey1: {
my3rdLevelKey1: {
my4thLevelKey1: "true",
my4thLevelKey2: "false"
}
},
my2ndLevelKey2: {
my3rdLevelKey2: "FALSE"
}
}
}
Was ich will, am Ende ist diese:
var myObj = {
my1stLevelKey1: true,
my1stLevelKey2: "a normal string",
my1stLevelKey3: {
my2ndLevelKey1: {
my3rdLevelKey1: {
my4thLevelKey1: true,
my4thLevelKey2: false
}
},
my2ndLevelKey2: {
my3rdLevelKey2: false
}
}
}
Wichtig ist, dass die Anzahl sub-Objekte/Ebenen unbekannt ist. Wie kann ich dies effektiv, indem Sie entweder mit der klassischen JavaScript oder Mootools?
- Sie brauchen einen rekursiven iterator. schauen Sie in json2.js um zu sehen, wie es durchdringt Objekte. Sie können auch verwenden tatsächlich eine JSON-revivor-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rekursion ist dein Freund
Den
obj[k].toLowerCase()
ist es, der groß-und KleinschreibungFuß jeder Ebene der Objekt-und ersetzen-Boolesche, string-Werte mit den entsprechenden Boolean. Wenn Sie ein Objekt, recurse-in, und ersetzen Sie wieder.
Können Sie
Object.keys
greifen alle Mitglieder der einzelnen Objekte, ohne sich Gedanken über immer geerbt, Eigenschaften, die Sie nicht sollte.JS:
HTML:
JavaScript-Datenstrukturen aus können sanitized durch rekursive funktionale
reduce
Ansätze.Plain javascript Rekursion Beispiel:
Und MooTools Beispiel durch die Verlängerung der
Object
Typ mit benutzerdefiniertenmapDeep()
Funktion:obj[prop] === Object(obj[prop])
, warum nutzen Sie nichttypeof obj[prop] === 'object'
?