Js, как создать копию объекта, а также всех объектов вложенных в него без ссылки? (написал функцию, но она работает не совсем корректно)
// функция ниже должна создавать копии всех вложенных объектов при помощи Object.assign()
function assignFunc(test) {
let newTest = {}
Object.keys(test).map((key) => {
if (typeof test[key] == "object") {
test[key] = assignFunc(test[key])
newTest[key] = Object.assign({}, test[key])
} else {
newTest[key] = test[key]
}
})
return Object.assign({}, newTest)
}
// пример: test2 должен иметь те же значения что и test1, но при изменении значений в test2, значения в test1 не должны меняться.
let test1 = [
{name: "name", idObj: {id: 0, isObj: {text: "text"} }},
{name: "name2", idObj: {id: 1, isObj: {text: "text"} }}
]
let test2 = test1.slice(0)
test2 = test2.map((test) => {
test = assignFunc(test)
return test
})
// при изменении 2-ух значений ниже, test1 не изменяется
test2[0].name = "vasa"
test2[0].idObj.id = 19219
// при изменении данного значения, test1 также принимает значение "newText" -_-
test2[0].idObj.isObj.text = "newText"
console.log("Test1", test1[0])
console.log("Test2", test2[0])
Вообщем выше я вставил функцию assignFunc, в комментариях я постарался кратко объяснить суть проблемы, она работает вроде как корректно, но когда дело доходит до глубоко вложенных объектов (в данном случае это isObj, который находится внутри объекта idObj который находится...), функция Object.assign перестает давать требуемый результат.