Вынесите список полей-ветвей в одну структуру и обходите его циклом, оставив обработку узла в одном месте.
Как улучшить обход, чтобы не дублировать код при появлении дополнительных полей-ветвей, например `center` и `leftCenter`?
Вынесите список полей-ветвей в одну структуру и обходите его циклом, оставив обработку узла в одном месте.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Вынесите список полей-ветвей в одну структуру и обходите его циклом, оставив обработку узла в одном месте.
Например, при контракте узла с необязательными дочерними объектами:
function walk(node, visit, branches = ['left', 'right', 'center', 'leftCenter']) {
if (node == null) return;
visit(node);
for (const key of branches) {
if (Object.hasOwn(node, key)) walk(node[key], visit, branches);
}
}
Пример рассчитан на валидное конечное дерево без циклов. Для недоверенных данных нужна отдельная валидация, а для графа — контроль посещённых узлов. Не обходите все поля автоматически: среди них могут быть данные, а не ветви.