Answer

Answer

t.me/js_test

Ответ:

Первый вариант:

const propertiesToSnakeCaseFirst = (obj) =>
  Object.entries(obj).reduce(
    (acc, [key, value]) => ({
      ...acc,
      [key.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`)]: value,
    }),
    {}
  );

Второй вариант:

const propertiesToSnakeCaseSecond = (obj) => {
  const pairs = Object.entries(obj);

  const mapPair = (pair) => {
    const [key, value] = pair;
    const mappedKey = key.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`);
    return { [mappedKey]: value };
  };

  return pairs.reduce(
    (mappedObj, pair) => ({ ...mappedObj, ...mapPair(pair) }),
    {}
  );
};

Обьяснение:

Используя Object.entries() получаем массив вида [[key,value]] , после чего вызываем на этом массиве функцию Array.reduce(), в каждой паре конвертируем key к нужному нам формату и с помощью деструктуризации добавляем отредактированную пару в новый обьект.

P.S. Выберите, какой тип решения вам нравится больше - Первый(ниндзя-код в одну строку) или Второй(детально расписан каждый шаг). В комментариях к этому посту будет опросник - ваш голос поможет определить более релевантный контент.

Код для проверки:

const objectSnakeCase = {
  firstName: "Ivan",
  lastName: "Ivanov",
  dateOfBirth: new Date(),
};

const propertiesToSnakeCaseFirst = (obj) =>
  Object.entries(obj).reduce(
    (acc, [key, value]) => ({
      ...acc,
      [key.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`)]: value,
    }),
    {}
  );

const propertiesToSnakeCaseSecond = (obj) => {
  const pairs = Object.entries(obj);

  const mapPair = (pair) => {
    const [key, value] = pair;
    const mappedKey = key.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`);
    return { [mappedKey]: value };
  };

  return pairs.reduce(
    (mappedObj, pair) => ({ ...mappedObj, ...mapPair(pair) }),
    {}
  );
};

console.log(propertiesToSnakeCaseFirst(objectSnakeCase));
console.log(propertiesToSnakeCaseSecond(objectSnakeCase));

Report Page