Ожидал другой результат от рекурсивного копирования свойств объекта
Сделал рекурсивное глубокое копирование по объекту.
Но, объекты не идентичны друг другу, в оригинале у меня объект sizes, а в результате получил распарсенные данные обекта sizes, разве так и должно быть? Как получить результат 1 в 1 как в оригинале, но при этом чтоб объекты были разные?
Интересно именно решение с for in, за JSON.parse знаю
const user = {
name: 'Igor',
age: '26',
sizes: {
height: 182,
width: 50,
},
};
const admin = {}; // Создаем новый пустой объект
function cloneObj(obj) {
for (let key in obj) { // Перебираем все свойства копируемого объекта
if (typeof obj[key] === 'object') { // Если свойство так же объект
cloneObj(obj[key]);
} else {
admin[key] = obj[key]; // Или же просто копируем значение
}
}
}
cloneObj(user);
console.log(user);
console.log(admin);
Ответы (1 шт):
Автор решения: Leonid
→ Ссылка
Рекурсивно можно возвращать объект из функции. А объект создаю в самой функции.
const user = {
name: 'Igor',
age: '26',
sizes: {
height: 182,
width: 50,
},
};
function cloneObj(obj) {
let result = {}; // Создаем новый объект
for (let key in obj) { // Перебираем все свойства копируемого объекта
if (typeof obj[key] === 'object') { // Если свойство так же объект
result[key] = cloneObj(obj[key]);
} else {
result[key] = obj[key]; // Или же просто копируем значение
}
}
return result;
}
const admin = cloneObj(user);
console.log(user);
console.log(admin);
Но вряд ли вы получите глубокое копирование. Потому как тип объект и у массива, и у null, например.
const user = {
name: 'Igor',
age: '26',
sizes: {
height: 182,
width: 50,
},
friends: [
'Alex',
'Maria'
],
password: null
};
function cloneObj(obj) {
let result = {}; // Создаем новый объект
for (let key in obj) { // Перебираем все свойства копируемого объекта
if (typeof obj[key] === 'object') { // Если свойство так же объект
result[key] = cloneObj(obj[key]);
} else {
result[key] = obj[key]; // Или же просто копируем значение
}
}
return result;
}
const admin = cloneObj(user);
console.log(user);
console.log(admin);
console.log(JSON.parse(JSON.stringify(user)));
console.log(Object.assign({},user));