Рекурсия и многомерные структуры в JavaScript

Дан массив многомерный произвольного уровня вложенности, например, такой:

javascriptlet arr = [
  1,
  [
    2, 7, 8
  ],
  [
    3, 4, [5, [6, 7]],
  ]
];

Как вы видите, данный массив имеет сложную структуру, причем предполагается, что эта структура может быть произвольной и уровни вложенности могут быть сколь угодно глубоко.

Пусть мы хотим вывести в консоль все примитивные (то есть не массивы) элементы нашего массива. В этом случае для перебора такого массива у нас просто не получится использовать циклы, так как массив имеет неправильную структуру и неизвестный уровень вложенности.

Зато для перебора такого массива очень удобно будет использовать рекурсию.

Для начала сделаем функцию, в которую параметром будем передавать наш массив, а в функции сделаем цикл для перебора нашего массива:

javascriptfunction func(arr) {
  for (let elem of arr) {
    console.log(elem);
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

Сделанный нами цикл будет перебирать только элементы основного массива. To есть вначале он выведет 1, потом [2, 7, 8], а потом [3, 4, [5, [6, 7]].

Давайте теперь будем разделять в цикле элементы-примитивы и элементы-массивы:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // элемент - массив
    } else {
      // элемент - примитив
      console.log(elem);
    }
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

А теперь сделаем так, чтобы если наш элемент - массив, функция вызывала сама себя, передавая параметром этот массив:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      func(elem);
    } else {
      console.log(elem);
    }
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Задание 1

Дан многомерный объект произвольного уровня вложенности, например, такой:

javascript{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}

С помощью рекурсии выведите все примитивные элементы этого объекта в консоль.

Задание 2

Дан многомерный массив произвольного уровня вложенности, например, такой:

javascript[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]

Напишите код, который развернет наш многомерный массив в одномерный. Для приведенного выше массива это будет выглядеть вот так:

javascript[1, 2, 7, 8, 3, 4, 5, 6, 7]