JavaScript'te Özyineleme ve Çok Boyutlu Yapılar
Aşağıda, örneğin aşağıdaki gibi, keyfi seviyede iç içe geçmiş çok boyutlu bir dizi verilmiştir:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Gördüğünüz gibi, bu dizinin karmaşık bir yapısı var ve bu yapının keyfi olabileceği ve iç içe geçme seviyelerinin ne kadar derin olabileceği varsayılıyor.
Diyelim ki konsola dizimizin tüm ilkel (yani diziler değil) elemanlarını yazdırmak istiyoruz. Bu durumda, böyle bir diziyi gezmek için döngüleri kullanmamız mümkün olmayacaktır, çünkü dizi düzensiz bir yapıya sahiptir ve bilinmeyen bir iç içe geçme seviyesi vardır.
Ancak, böyle bir diziyi gezmek için özyineleme kullanmak çok uygun olacaktır.
Başlangıç olarak, parametre olarak dizimizi ileteceğimiz bir fonksiyon yapalım ve fonksiyonun içinde dizimizi gezmek için bir döngü kuralım:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Yaptığımız döngü sadece ana dizinin elemanlarını
gezecektir. Yani önce 1'i, sonra [2, 7, 8]'yi,
ve sonra [3, 4, [5, [6, 7]]'yi yazdıracak.
Şimdi döngüde ilkel elemanları ve dizi elemanları ayıralım:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// eleman - dizi
} else {
// eleman - ilkel
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Ve şimdi, eğer elemanımız bir dizi ise, fonksiyonun kendisini çağırmasını, parametre olarak bu diziyi iletmesini sağlayalım:
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şağıda, örneğin aşağıdaki gibi, keyfi seviyede iç içe geçmiş çok boyutlu bir nesne verilmiştir:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Özyineleme kullanarak bu nesnenin tüm ilkel elemanlarını konsola yazdırın.
Aşağıda, örneğin aşağıdaki gibi, keyfi seviyede iç içe geçmiş çok boyutlu bir dizi verilmiştir:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Çok boyutlu dizimizi tek boyutlu bir diziye açan kodu yazın. Yukarıdaki dizi için bu aşağıdaki gibi görünecektir:
[1, 2, 7, 8, 3, 4, 5, 6, 7]