👨💻 Практические методы преобразования объектов в JavaScriptВ JavaScript часто возникает необходимость преобразования всех значений в сложных, вложенных объектах. Рекурсивный обход элегантно решает эту задачу, применяя заданную функцию ко всем значениям, независимо от уровня вложенности.
П
одходы:1️⃣Рекурсивная функция: создание функции, которая проходит по каждому ключу объекта и вызывает саму себя для дальнейшего обхода.
function mapObject(obj, fn) {
return Object.fromEntries(
Object.entries(obj).map(([key, value]) => {
if (typeof value === 'object' && value !== null) {
return [key, mapObject(value, fn)];
}
return [key, fn(value)];
})
);
}
2️⃣ Использование Object.keys() и Array.reduce(): применение этих методов для итерации по ключам объекта и накопления результатов в новом объекте.
function mapObject(obj, fn) {
return Object.keys(obj)
.reduce((acc, key) => {
const value = obj[key];
acc[key] = (typeof value === 'object' && value !== null)
? mapObject(value, fn)
: fn(value);
return acc;
}, {});
}
3️⃣ Использование библиотек Lodash или Ramda: эти библиотеки предоставляют утилиты для работы с объектами и коллекциями, упрощая процесс рекурсивного обхода.
const _ = require('lodash');
const mapObject = (obj, fn) =>
_.mapValues(obj, value => (typeof value === 'object' && value !== null)
? mapObject(value, fn)
: fn(value));