Рекурсия и многомерни структури в JavaScript
Даден е многомерен масив с произволно ниво на вложеност, например такъв:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Както виждате, този масив има сложна структура, като се предполага, че тази структура може да бъде произволна и нивата на вложеност могат да бъдат произволно дълбоки.
Да предположим, че искаме да изведем в конзолата всички примитивни (тоест не масиви) елементи на нашия масив. В този случай за обхождане на такъв масив просто няма да можем да използваме цикли, тъй като масивът има неправилна структура и неизвестно ниво на вложеност.
Вместо това за обхождане на такъв масив ще бъде много удобно да използваме рекурсия.
Като начало ще направим функция, в която като параметър ще подаваме нашия масив, а във функцията ще направим цикъл за обхождане на масива:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Цикълът, който направихме, ще обхожда само
елементите на главния масив. Тоест първо
ще изведе 1, след това [2, 7, 8],
а след това [3, 4, [5, [6, 7]].
Сега нека в цикъла да разделяме елементите-примитиви и елементите-масиви:
function 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]]]]);
И сега нека направим така, че ако нашият елемент е масив, функцията да извиква сама себе си, подавайки като параметър този масив:
function 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]]]]);
Даден е многомерен обект с произволно ниво на вложеност, например такъв:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
С помощта на рекурсия изведете всички примитивни елементи на този обект в конзолата.
Даден е многомерен масив с произволно ниво на вложеност, например такъв:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Напишете код, който ще разгъне нашия многомерен масив в едномерен. За дадения по-горе масив това ще изглежда така:
[1, 2, 7, 8, 3, 4, 5, 6, 7]