İç 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.isArray kullanın; typeof dizi için "object" döner.
  1. var, let ve const arasındaki fark nedir?KolayJavaScriptFrontend
  2. == ile === arasındaki fark nedir?KolayJavaScriptFrontend
  3. Closure nedir? Bir örnekle açıklayın.OrtaJavaScriptFrontend
  4. Aşağıdaki kodun çıktısı nedir? (Event loop)OrtaJavaScriptFrontend
  5. this anahtar kelimesi nasıl belirlenir? Arrow function'larda ne değişir?OrtaJavaScriptFrontend
  6. Bir debounce fonksiyonu yazın.ZorJavaScriptFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle