Rekursija un daudzdimensiju struktūras JavaScript
Dots daudzdimensiju masīvs ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Kā jūs redzat, šim masīvam ir sarežģīta struktūra, un tiek pieņemts, ka šī struktūra var būt patvaļīga un līmeņu ligzdotība var būt patvaļīgi dziļa.
Pieņemsim, ka mēs vēlamies izvadīt konsolē visus primitīvos (tas ir, ne masīvus) elementus no mūsu masīva. Šajā gadījumā, lai apstaigātu šādu masīvu, mums vienkārši neizdosies izmantot ciklus, jo masīvam ir neregulāra struktūra un nezināms ligzdotības līmenis.
Bet, lai apstaigātu šādu masīvu, ļoti ērti varēs izmantot rekursiju.
Sākumā izveidosim funkciju, kuras parametrā padodam mūsu masīvu, un funkcijā izveidosim ciklu mūsu masīva apstaigāšanai:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Mūsu izveidotais cikls apstaigās tikai
pamatmasīva elementus. Tas ir, sākumā
tas izvadīs 1, tad [2, 7, 8],
un pēc tam [3, 4, [5, [6, 7]].
Tagad cilpā sāksim atšķirt primitīvos elementus un masīvu elementus:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elements - masīvs
} else {
// elements - primitīvs
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Un tagad panāksim, ka, ja mūsu elements ir masīvs, funkcija izsaucas pati sevi, padodot kā parametru šo masīvu:
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]]]]);
Dots daudzdimensiju objekts ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Izmantojot rekursiju, izvadiet visus primitīvos elementus no šī objekta konsolē.
Dots daudzdimensiju masīvs ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Uzrakstiet kodu, kas pārvērtīs mūsu daudzdimensiju masīvu par viendimensiju. Dotajam masīvam tas izskatīsies šādi:
[1, 2, 7, 8, 3, 4, 5, 6, 7]