Rekursion og multidimensionelle strukturer i JavaScript
Givet et multidimensionelt array med en vilkårlig niveau af indlejring, for eksempel som dette:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Som du kan se, har dette array en kompleks struktur, og det antages, at denne struktur kan være vilkårlig, og niveauerne af indlejring kan være uendeligt dybe.
Lad os sige, at vi ønsker at udskrive alle primitive (altså ikke arrays) elementer af vores array til konsollen. I dette tilfælde vil vi simpelthen ikke kunne bruge loops til at gennemgå et sådant array, fordi arrayet har en uregelmæssig struktur og et ukendt indlejringsniveau.
Derimod vil rekursion være meget egnet til at gennemgå et sådant array.
Lad os starte med at lave en funktion, hvor vi som parameter sender vores array, og i funktionen laver vi et loop for at gennemgå vores array:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Det loop, vi har lavet, vil kun gennemgå
elementerne i hovedarrayet. Det vil først
udskrive 1, derefter [2, 7, 8],
og derefter [3, 4, [5, [6, 7]].
Lad os nu i løkken skelne mellem primitive elementer og array-elementer:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elementet er et array
} else {
// elementet er en primitiv værdi
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Og lad os nu gøre sådan, at hvis vores element er et array, kalder funktionen sig selv, og sender dette array som parameter:
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]]]]);
Givet et multidimensionelt objekt med et vilkårligt niveau af indlejring, for eksempel som dette:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Brug rekursion til at udskrive alle primitive elementer af dette objekt til konsollen.
Givet et multidimensionelt array med et vilkårligt niveau af indlejring, for eksempel som dette:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Skriv kode, der vil udflade vores multidimensionelle array til et endimensionelt array. For arrayet vist ovenfor vil det se sådan ud:
[1, 2, 7, 8, 3, 4, 5, 6, 7]