Bir nesnenin derin kopyasını (deep clone) nasıl alırsınız?

Cevap

Spread ({...obj}) ve Object.assign yalnızca yüzeysel kopya yapar; iç içe nesneler hâlâ paylaşılır.

Seçenekler:

  • `structuredClone(obj)`: modern tarayıcılarda ve Node 17+'da yerleşik. Date, Map, Set, döngüsel referansları destekler; fonksiyonları ve DOM düğümlerini kopyalayamaz.
  • `JSON.parse(JSON.stringify(obj))`: basit ama Date'i string'e çevirir, undefined, fonksiyon ve Map'i kaybeder, döngüsel referansta hata verir.
  • Kendi fonksiyonunuz: mülakatta genelde istenen budur.
function derinKopya(deger, gorulen = new WeakMap()) {
  if (deger === null || typeof deger !== "object") return deger;
  if (deger instanceof Date) return new Date(deger);
  if (gorulen.has(deger)) return gorulen.get(deger);   // döngüsel referans

  const kopya = Array.isArray(deger) ? [] : {};
  gorulen.set(deger, kopya);
  for (const anahtar of Reflect.ownKeys(deger)) {
    kopya[anahtar] = derinKopya(deger[anahtar], gorulen);
  }
  return kopya;
}
  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