Rekursiya ve çoxölçülü strukturlar JavaScript-də
Tutaq ki, ixtiyari dərəcədə iç-içəlikə malik çoxölçülü massiv verilib, məsələn, belə:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Gördüyünüz kimi, bu massivin mürəkkəb quruluşu var, və güman edilir ki, bu quruluş ixtiyari ola bilər və iç-içəlik səviyyələri istənilən qədər dərin ola bilər.
Tutaq ki, biz massivimizin bütün primitiv (yəni, massiv olmayan) elementlərini konsola çıxarmaq istəyirik. Bu halda, belə bir massivi iterasiya etmək üçün sadəcə dövrələrdən istifadə edə bilməyəcəyik, çünki massivin qeyri-müntəzəm quruluşu var və naməlum iç-içəlik səviyyəsi var.
Lakin belə bir massivi iterasiya etmək üçün rekursiyadan istifadə etmək çox əlverişli olardı.
Əvvəlcə elə bir funksiya edək ki, parametr kimi ona massivimizi ötürək, və funksiyada massivimizi iterasiya etmək üçün dövrə quraq:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Qurduğumuz dövrə yalnız əsas massivin
elementlərini iterasiya edəcək. Yəni əvvəlcə
o 1, sonra [2, 7, 8],
və sonra [3, 4, [5, [6, 7]] çıxaracaq.
Gəlin indi dövrədə primitiv elementləri və massiv elementlərini ayıraq:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// element - massiv
} else {
// element - primitiv
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Və indi elə edək ki, əgər elementimiz - massivdirsə, funksiya özünü çağırsın, ötürdüyü parametrlə bu massivi:
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]]]]);
Tutaq ki, ixtiyari dərəcədə iç-içəlikə malik çoxölçülü obyekt verilib, məsələn, belə:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Rekursiyadan istifadə edərək bu obyektin bütün primitiv elementlərini konsola çıxarın.
Tutaq ki, ixtiyari dərəcədə iç-içəlikə malik çoxölçülü massiv verilib, məsələn, belə:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Çoxölçülü massivimizi birölçülüyə açan kodu yazın. Yuxarıda göstərilən massiv üçün nəticə belə görünəcək:
[1, 2, 7, 8, 3, 4, 5, 6, 7]