Разгладить объект: методы и примеры преобразования данных

При работе со структурами данных можно столкнуться с ситуациями, когда необходимо преобразовать сплющенный объект в исходную иерархическую форму. Этот процесс известен как «разглаживание» объекта. В этой статье мы рассмотрим различные методы и предоставим примеры кода на JavaScript и Python для разглаживания объектов. Давайте погрузимся!

Метод 1: рекурсивный подход (JavaScript)

function unflattenObject(flatObject) {
  const result = {};
  for (let key in flatObject) {
    if (flatObject.hasOwnProperty(key)) {
      const value = flatObject[key];
      const keys = key.split('.');
      keys.reduce((acc, currKey, index) => {
        if (!acc.hasOwnProperty(currKey)) {
          acc[currKey] = isNaN(Number(keys[index + 1])) ? {} : [];
        }
        if (index === keys.length - 1) {
          acc[currKey] = value;
        }
        return acc[currKey];
      }, result);
    }
  }
  return result;
}
// Usage example:
const flattenedObj = {
  'user.name': 'John Doe',
  'user.age': 25,
  'user.address.street': '123 Main St',
  'user.address.city': 'New York'
};
const unflattenedObj = unflattenObject(flattenedObj);
console.log(unflattenedObj);

Метод 2: подход на основе стека (Python)

def unflatten_object(flat_object):
    result = {}
    for key, value in flat_object.items():
        keys = key.split('.')
        current = result
        for k in keys[:-1]:
            if k not in current:
                current[k] = {}
            current = current[k]
        if keys[-1] not in current:
            current[keys[-1]] = value
    return result
# Usage example:
flattened_obj = {
    'user.name': 'John Doe',
    'user.age': 25,
    'user.address.street': '123 Main St',
    'user.address.city': 'New York'
}
unflattened_obj = unflatten_object(flattened_obj)
print(unflattened_obj)

Метод 3: библиотечный подход (JavaScript)

Если вы предпочитаете использовать библиотеку, вы можете использовать «плоскую» библиотеку в JavaScript. Он обеспечивает простой способ сглаживания и развертывания объектов.

const flatten = require('flat');
// Usage example:
const flattenedObj = {
  'user.name': 'John Doe',
  'user.age': 25,
  'user.address.street': '123 Main St',
  'user.address.city': 'New York'
};
const unflattenedObj = flatten.unflatten(flattenedObj);
console.log(unflattenedObj);

В этой статье мы рассмотрели различные методы развертывания объектов в JavaScript и Python. Рекурсивный подход и подход на основе стека предлагают реализацию вручную, что позволяет вам иметь детальный контроль над процессом разглаживания. Альтернативно, использование такой библиотеки, как «плоская» в JavaScript, обеспечивает удобный способ достижения того же результата без написания собственного кода. Выберите метод, который лучше всего соответствует вашим потребностям, и наслаждайтесь распрямлением объектов без особых усилий!