Hier ist eine schnelle CoffeeScript Version basiert weg Matthew Crumley's answer (I nicht includePrototype
verwendet haben, da ich keine Notwendigkeit, es hatte):
flatten = (obj, into = {}, prefix = '', sep = '_') ->
for own key, prop of obj
if typeof prop is 'object' and prop not instanceof Date and prop not instanceof RegExp
flatten prop, into, prefix + key + sep, sep
else
into[prefix + key] = prop
into
und eine grundlegende Verflachung-Version, die mit wiederholten Separatoren und andere solche Verschlagenheit zweifellos scheitern würde:
unflatten = (obj, into = {}, sep = '_') ->
for own key, prop of obj
subKeys = key.split sep
sub = into
sub = (sub[subKey] or= {}) for subKey in subKeys[...-1]
sub[subKeys.pop()] = prop
into
FWIW, ich verwende diese Funktionen, um Objektdiagramme in Redis hashes zu schieben, die nur eine einzelne Tiefe von Schlüssel/Wert-Paaren unterstützen.
Warum würden Sie das brauchen? Willst du deine Javascripts während der Bauzeit verarbeiten und dann wird die Laufzeit verbessert? Aber wie würden Sie von Ihrer js (nach der Komprimierung) auf verschachtelte Objekte zugreifen, wenn Sie mit einem komplexen Objektmodell arbeiten müssen (wo zum Beispiel ein Unterobjekt (verschachteltes Objekt) als Argument an eine Funktion übergeben werden muss)? –
Ich brauche dies für eine Datenzuordnung, wo die Verarbeitung verschachtelte Objekte nicht behandelt. – AnC
Ich hatte ähnliche Anforderungen an AnC, wenn verschachtelte Objekte mit [Redis] (http://redis.io/commands#hash) verwendet werden, da es nur flache Hashes unterstützt. Ich endete mit einer [CoffeeScript-Version] (http://stackoverflow.com/questions/963607/compressing-object-hierarchies-in-javascript/6940124#6940124) von [Matthew Crumleys Lösung] (http://stackoverflow.com)/questions/963607/compressing-object-Hierarchies-in-javascript/965315 # 965315). –