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));