// [1, 2, 3, [4, [5]]] => [1, 2, 3, 4, 5]

Вложенный массив можно развернуть обходом в глубину, сохраняя порядок и добавляя в результат только не-массивы.

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

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

Вложенный массив можно развернуть обходом в глубину, сохраняя порядок и добавляя в результат только не-массивы.

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

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

Условие

// [1, 2, 3, [4, [5]]] => [1, 2, 3, 4, 5]

function

Ответ

Вложенный массив можно развернуть обходом в глубину, сохраняя порядок и добавляя в результат только не-массивы.

Итеративный вариант для конечных ациклических массивов не расходует стек вызовов на вложенность:

function flatten(array) {
  const result = [];
  const stack = [array[Symbol.iterator]()];
  while (stack.length) {
    const item = stack[stack.length - 1].next();
    if (item.done) stack.pop();
    else if (Array.isArray(item.value)) stack.push(item.value[Symbol.iterator]());
    else result.push(item.value);
  }
  return result;
}

Для примера получится [1, 2, 3, 4, 5]. Здесь пустые позиции дают undefined; нативный flat(Infinity) пропускает их.

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

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

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

Подробнее