@Levhav
Возьмусь за разработку проектов любой сложности.

Как рекурсивно обойти объект не заходя в циклически ссылки?

Как пройтись по всем свойствам объекта свойствам всех вложенных в него объектов ровно 1 раз?

let a = { }
let b = {  parent:a}
let c = {  parent:a}
a.parent = c
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
profesor08
@profesor08 Куратор тега JavaScript
Веди учет посещенных ссылок и проверяй каждый раз.
Ответ написан
Комментировать
@xxx3Vxxx
Программист C++
Либо внутри свойства держать признак того что оно посещено (в алгоритмах на графах такое используется, например окрашивание вершин при поиске в глубину), либо, как написали выше, хранить посещенные (например, в хеш-таблице).

При этом, кстати, алгоритму не нужно быть рекурсивным. Можно использовать очередь.
Помещаешь в очередь первый элемент, а далее цикл пока очередь не пустая.
В цикле выбираешь из очереди первый элемент и закидываешь в очередь всех его не посещенных потомков. Посещаешь выбранный элемент.
См. "поиск в ширину" и "поиск в глубину".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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