Создание собственного метода flatten

Используйте явный стек кадров с массивом и текущим индексом. Это сохраняет порядок и не переполняет стек вызовов на глубокой вложенности; flat и рекурсивные вызовы не нужны.

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

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

Используйте явный стек кадров с массивом и текущим индексом. Это сохраняет порядок и не переполняет стек вызовов на глубокой вложенности; flat и рекурсивные вызовы не нужны.

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

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

Условие

Разработайте свою версию функции flatten, которая преобразует вложенные массивы в плоскую структуру. При этом необходимо реализовать алгоритм без использования готовых методов языка, полагаясь только на базовые конструкции и рекурсию/итерацию. Пример входных данных и ожидаемого результата:

const nested = [1, [2, [3, 4], 5], 6];
// ваш метод flatten(nested) должен вернуть [1, 2, 3, 4, 5, 6]

Требования:

  • Функция должна корректно обрабатывать массивы любой глубины вложенности.
  • Не использовать встроенный Array.prototype.flat или аналогичные готовые решения.
  • Сохранить порядок элементов как в оригинальном массиве.
  • Обеспечить работу как с пустыми массивами, так и с массивами, содержащими различные типы данных (числа, строки, объекты и т.д.).

Ответ

Используйте явный стек кадров с массивом и текущим индексом. Это сохраняет порядок и не переполняет стек вызовов на глубокой вложенности; flat и рекурсивные вызовы не нужны.

function flatten(input) {
  const result = [], stack = [{ array: input, index: 0 }];
  while (stack.length) {
    const frame = stack[stack.length - 1];
    if (frame.index >= frame.array.length) { stack.length--; continue; }
    const index = frame.index++;
    if (!(index in frame.array)) continue;
    const value = frame.array[index];
    if (Array.isArray(value)) stack[stack.length] = { array: value, index: 0 };
    else result[result.length] = value;
  }
  return result;
}

Array.isArray используется только для проверки типа; для разворачивания нет готовых методов и даже push/pop. Пустые позиции пропускаются, явный undefined сохраняется, обычные объекты остаются по ссылке. Контракт — конечная структура без циклов; «любая глубина» ограничена доступной памятью.

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

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

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

Подробнее