Rekursio ja moniulotteiset rakenteet JavaScriptissä
Annettu taulukko on moniulotteinen mielivaltaisella sisäkkäisyystasolla, esimerkiksi tällainen:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Kuten näet, tällä taulukolla on monimutkainen rakenne, ja oletetaan, että tämä rakenne voi olla mielivaltainen ja sisäkkäisyystasot voivat olla miten syviä tahansa.
Oletetaan, että haluamme tulostaa konsoliin kaikki primitiiviset (eli eivät taulukot) elementit taulukostamme. Tässä tapauksessa tällaisen taulukon läpikäyntiin emme yksinkertaisesti pysty käyttämään silmukoita, koska taulukolla on epäsäännöllinen rakenne ja tuntematon sisäkkäisyystaso.
Sen sijaan tällaisen taulukon läpikäyntiin on erittäin kätevää käyttää rekursiota.
Aluksi teemme funktion, jonka parametrina annamme taulukkomme, ja funktiossa teemme silmukan taulukkomme läpikäyntiä varten:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Tekemämme silmukka käy läpi vain
päätaulukon elementit. Eli aluksi
se tulostaa 1, sitten [2, 7, 8],
ja sitten [3, 4, [5, [6, 7]].
Erotellaan nyt silmukassa primitiivielementit ja taulukkoelementit:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elementti on taulukko
} else {
// elementti on primitiivi
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Ja nyt tehdään niin, että jos elementtimme on taulukko, funktio kutsuu itseään, välittäen parametrina tämän taulukon:
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]]]]);
Annettu moniulotteinen olio mielivaltaisella sisäkkäisyystasolla, esimerkiksi tällainen:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Käytä rekursiota tulostaaksesi kaikki primitiiviset elementit tästä oliosta konsoliin.
Annettu moniulotteinen taulukko mielivaltaisella sisäkkäisyystasolla, esimerkiksi tällainen:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Kirjoita koodi, joka muuttaa moniulotteisen taulukkomme yksiulotteiseksi. Annettua taulukkoa varten se näyttää tältä:
[1, 2, 7, 8, 3, 4, 5, 6, 7]