169 похожих чатов

Добрый день! Изучаю объекты, остановился на теме копирования и захотел

написать свой код глубокого копирования свойств одного объекта в другой. Столкнулся с проблемой вложенных объектов в свойствах копируемого объекта. Код был написан, но он работает только на 3 уровня вложенности, дальше просто копируется ссылка на объект. Хотелось бы написать такой код, который проходится по всем уровням вложенности, как это можно реализовать на чистом JS, без использования библиотек?
P.S. Прочитал про готовые реализации с помощью .cloneDeep(obj), но хотелось бы самому написать это и разобраться.
P.S.S Прошу воспринимать код просто как учебные заметки. Буду рад рекомендациям.

function cloneObj(obj){

for(let key in obj){
if(typeof obj[key] == 'object'){
for(let x in obj[key]){

if ( typeof obj[key][x] == 'object'){
for(let y in obj[key][x]){
clone[y] = obj[key][x][y]

}

}else{
clone[x] = obj[key][x]
}

}


}else{
clone[key] = obj[key]
}
}
return clone
}

5 ответов

6 просмотров

Рекурсия

Кирилл- Автор вопроса
Daniil 🇺🇦
Рекурсия

Спасибо за ответ, буду изучать рекурсии) Рано походу углубился в эту тему

Просто внутри первой развилки с typeof object вставь clone[key] = cloneObj(obj[key]), ну и отладь полученный код :)

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Карта сайта