Задачи по JavaScript
October 30, 2023

Развернуть вложенный массив | Алгоритмические задачи по JavaScript

 Три подхода для разворачивания массива любой вложенности:

Код

Мутирование

const arr = [1, [2, 3, [4, 5, 6]], 7]

const flat = (arr) => {
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      arr.splice(i, 1, ...arr[i])
    }
  }
  return arr
}

flat(arr) // [1, 2, 3, 4, 5, 6, 7]

Рекурсия

const arr = [1, [2, 3, [4, 5, 6]], 7]

const flat = (arr) => {
  const cache = []
  
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      cache.push(...flat(arr[i]))
    } else {
      cache.push(arr[i])
    }
  }
  return cache
}

flat(arr) // [1, 2, 3, 4, 5, 6, 7]

Стэк

const arr = [1, [2, 3, [4, 5, 6]], 7]

const flat = (arr) => {
  const stack = [...arr]
  const result = []
  
  while(stack.length > 0) {
     const pop = stack.pop()
     
     if (Array.isArray(pop) {
        stack.unshift(...pop)
     } else {
        result.push(pop)
     }
  }
  
  return result
}

flat(arr) // [1, 2, 3, 4, 5, 6, 7]

Вопросы

  • Почему рекурсия наиболее худший вариант из предложенных?

Полезное

Задачи