Вот быстрая версия CoffeeScript , основанная на Ответ Мэтью Крамли (я не использовал includePrototype
, так как мне это не нужно):
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
И базовая версия без платы, которая, несомненно, выйдет из строя при многократных разделителях и других подобных хитростях:
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, я использую эти функции для вставки графов объектов в Хэши Redis , которые поддерживают только одну глубину пар ключ / значение.