Пошук уроків, статей та іншого контенту
Створіть повністю незалежну копію вкладеного об'єкта чи масиву, на будь-яку глибину вкладеності.
Напишіть функцію solve(value), яка повертає глибоку копію переданого значення: якщо value — об'єкт чи масив із вкладеними об'єктами/масивами на будь-яку глибину, копія має бути повністю незалежною — зміна вкладеного поля в копії не повинна впливати на оригінал. Примітивні значення (числа, рядки, boolean, null) повертайте як є.
Приклади
Вхід: { a: 1, b: { c: 2 } }
Вихід: { a: 1, b: { c: 2 } }
структурно ідентична копія, але вкладений b — новий об'єкт, не те саме посилання
Вхід: [1, [2, 3], { x: 4 }]
Вихід: [1, [2, 3], { x: 4 }]
Вхід: 42
Вихід: 42
примітив повертається як є
Ваше рішення
Підказки
Це задача на рекурсію (модуль «Функції»): базовий випадок — примітив, повертайте як є; рекурсивний — об'єкт чи масив, клонуйте кожне поле/елемент через рекурсивний виклик solve.
Array.isArray(value) допомагає розрізнити, чи потрібно будувати новий масив, чи новий об'єкт.
Просте { ...value } чи [...value] (spread, модуль «Об'єкти та масиви») копіює лише поверхнево — вкладені об'єкти всередині залишаться спільними посиланнями, тому потрібна саме рекурсія, а не одноразовий spread.
function solve(value) {
if (value === null || typeof value !== "object") return value;
if (Array.isArray(value)) {
return value.map((item) => solve(item));
}
const result = {};
for (const key in value) {
result[key] = solve(value[key]);
}
return result;
}Базовий випадок рекурсії — примітив або null, який повертається без змін. Для масивів і об'єктів кожне значення клонується рекурсивним викликом solve, тому копія незалежна на будь-якій глибині вкладеності.