İç içe bir diziyi düzleştiren (flatten) bir fonksiyon yazın. Derinlik parametresi de alsın.
Cevap
Native çözüm arr.flat(depth)'tir (Infinity ile tamamen düzleştirir), ancak mülakatta genelde kendiniz yazmanız istenir.
Recursive çözüm
function flatten(arr, depth = Infinity) {
const result = [];
for (const item of arr) {
if (Array.isArray(item) && depth > 0) {
result.push(...flatten(item, depth - 1));
} else {
result.push(item);
}
}
return result;
}
flatten([1, [2, [3, [4]]]]); // [1, 2, 3, 4]
flatten([1, [2, [3, [4]]]], 1); // [1, 2, [3, [4]]]Iteratif çözüm (stack ile)
Çok derin dizilerde call stack taşmasını önler:
function flattenIterative(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const item = stack.pop();
if (Array.isArray(item)) stack.push(...item);
else result.push(item);
}
return result.reverse();
}Kenar durumları
push(...bigArray)çok büyük dizilerde argüman limitine takılabilir; döngüyle tek tek eklemek daha güvenlidir.- Boş delikler (
[1, , 3]):flat()bunları atlar. - Sadece
Array.isArraykullanın;typeofdizi için"object"döner.
İlgili JavaScript soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.