Пошук уроків, статей та іншого контенту
Перетворіть вкладений об'єкт на плаский об'єкт з ключами у dot-notation.
Напишіть функцію solve(obj), яка приймає вкладений об'єкт (без масивів у значеннях) і повертає плаский об'єкт, де кожен ключ — шлях до відповідного примітивного значення через крапку (наприклад, "b.c"), а значення — саме це примітивне значення.
Приклади
Вхід: { a: 1, b: { c: 2, d: { e: 3 } } }
Вихід: { "a": 1, "b.c": 2, "b.d.e": 3 }
Вхід: { a: 1 }
Вихід: { "a": 1 }
немає вкладеності — ключі лишаються без змін
Обмеження: Значення полів — числа, рядки, boolean, null або вкладені об'єкти (без масивів).
Ваше рішення
Підказки
Це задача на рекурсію: якщо значення поля саме є об'єктом, рекурсивно сплющіть його з оновленим префіксом шляху; якщо ні — це кінцеве значення.
Об'єднуйте результати рекурсивних викликів в один об'єкт через Object.assign(result, ...) чи spread.
function solve(obj, prefix = "") {
const result = {};
for (const key in obj) {
const value = obj[key];
const path = prefix ? prefix + "." + key : key;
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
Object.assign(result, solve(value, path));
} else {
result[path] = value;
}
}
return result;
}Базовий випадок — значення не є об'єктом (примітив), тоді воно записується під повним шляхом path. Якщо значення саме є об'єктом, функція рекурсивно сплющує його, передаючи оновлений префікс, а результат домішується (Object.assign) у спільний result.