Как обойти объект с произвольной вложенностью?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

Дан конечный ациклический объект JavaScript из вложенных обычных объектов и числовых листьев: {a: 2, b: {c: 3, d: {e: 4}}}. Нужно найти сумму всех чисел независимо от глубины, не меняя исходник. Как обобщить решение для одного уровня?

Ответ

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

function sumLeaves(root) {
  const stack = [root];
  let sum = 0;
  while (stack.length) {
    const value = stack.pop();
    if (typeof value === 'number') sum += value;
    else if (value !== null && typeof value === 'object') {
      stack.push(...Object.values(value));
    }
  }
  return sum;
}

Время O(N) по числу значений. Явный стек избегает глубокой рекурсии, но для очень широких объектов лучше добавлять дочерние значения циклом вместо spread. Циклы исключены условием; иначе нужен контроль посещённых объектов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее