Задача:
Реализуйте и экспортируйте по умолчанию функцию, которая выполняет глубокое копирование объектов.
import cloneDeep from '../objects.js';
const data = {
key: 'value',
key2: {
key: 'innerValue',
innerKey: {
anotherKey: 'anotherValue',
},
},
};
// result имеет такую же структуру, как и data
const result = cloneDeep(data);
// Но внутри другие объекты
result.key2 !== data.key2; // true
result.key2.innerKey !== data.key2.innerKey; // true
Для решения этой задачи, нужно последовательно обойти исходный объект и скопировать его данные в другой объект. Если значением какого-то свойства является объект, то нужно рекурсивно запустить реализованную функцию.
Подсказки
Для рекурсивного запуска понадобится имя для функции
_.isObject()
Object.entries()
Рекурсия
Для реализации этой задачи нельзя использовать функцию cloneDeep() библиотеки lodash.
Вот что я написала:
import isObject from 'lodash/isObject.js';
const cloneDeep = (obj) => {
let result = {};
const entries = Object.entries(obj);
for (const entry of entries) {
if (!isObject(entry)) {
result = Object.assign(result, Object.fromEntries(entry));
} else return cloneDeep(entry);
} return result;
};
export default cloneDeep;