JavaScript Development

JavaScript’te Dizilerin Derin Kopyalarında Ustalık

Spread the love

JavaScript’te dizileri derin kopyalamak, veri bütünlüğünü sağlamak ve beklenmedik yan etkileri önlemek için çok önemlidir. Sadece referansları çoğaltan sığ kopyaların aksine, derin kopyalar tüm iç içe geçmiş yapılar da dahil olmak üzere tamamen bağımsız kopyalar oluşturur. Bu makale, derin kopyaları elde etmenin çeşitli yöntemlerini inceleyerek, belirli ihtiyaçlarınız için en uygun yaklaşımı seçmenize yardımcı olmak üzere güçlü ve zayıf yönlerini karşılaştırmaktadır.

İçerik Tablosu

Sığ ve Derin Kopyaları Anlamak

JavaScript’te veri yapıları kopyalanırken, sığ ve derin kopyalar arasında ayrım yapmak önemlidir. Sığ bir kopya yeni bir nesne oluşturur, ancak bunu orijinalin elemanlarına referanslarla doldurur. Sığ bir kopya içindeki iç içe geçmiş bir elemanın değiştirilmesi, orijinalde de değiştirilecektir. Tersine, derin bir kopya, orijinal nesnenin ve tüm iç içe geçmiş yapılarının tamamen bağımsız bir kopyasını oluşturur. Derin kopyada yapılan değişiklikler orijinali etkilemez ve bunun tersi de geçerlidir.

structuredClone() Kullanımı

structuredClone() yöntemi, derin kopyalar oluşturmanın modern ve verimli bir yoludur. Günümüz tarayıcılarında ve Node.js ortamlarında yaygın olarak desteklenir ve dairesel referansları sorunsuz bir şekilde ele alır.


const originalArray = [1, 2, [3, 4], { a: 5 }];
const deepCopyArray = structuredClone(originalArray);

deepCopyArray[2].push(5); 
deepCopyArray[3].a = 10;

console.log("Orijinal Dizi:", originalArray); // Değişmeden kalır
console.log("Derin Kopya Dizi:", deepCopyArray); // Değiştirildi

Bu yöntem genellikle basitliği ve sağlamlığı nedeniyle tercih edilir.

JSON.parse() ve JSON.stringify()‘i Kullanma

Bu teknik, diziyi JSON.stringify() kullanarak bir JSON dizesine seri hale getirir ve ardından JSON.parse() kullanarak yeni bir diziye geri seri hale getirir. Basit diziler için etkili olsa da, sınırlamaları vardır.


const originalArray = [1, 2, [3, 4], { a: 5 }];
const deepCopyArray = JSON.parse(JSON.stringify(originalArray));

deepCopyArray[2].push(5);
deepCopyArray[3].a = 10;

console.log("Orijinal Dizi:", originalArray);
console.log("Derin Kopya Dizi:", deepCopyArray);

Sınırlamalar:

  • Yalnızca JSON ile seri hale getirilebilir veri türleriyle çalışır. Fonksiyonlar, Tarihler ve özel nesneler doğru şekilde işlenmeyebilir.
  • Büyük diziler için structuredClone()‘dan daha az verimli olabilir.

Lodash Kütüphanesini Kullanma

Lodash’ın _.cloneDeep() fonksiyonu, sağlam bir derin kopyalama çözümü sağlar. Ancak, harici bir bağımlılık getirir.


const _ = require('lodash'); // Lodash'ı yüklemeyi gerektirir: npm install lodash

const originalArray = [1, 2, [3, 4], { a: 5 }];
const deepCopyArray = _.cloneDeep(originalArray);

deepCopyArray[2].push(5);
deepCopyArray[3].a = 10;

console.log("Orijinal Dizi:", originalArray);
console.log("Derin Kopya Dizi:", deepCopyArray);

Lodash çeşitli veri türlerini etkili bir şekilde işler, ancak proje karmaşıklığını artırır.

En İyi Yöntemi Seçme

structuredClone(), verimliliği, geniş uyumluluğu ve kullanım kolaylığı dengesi nedeniyle genellikle önerilir. JSON.parse()/JSON.stringify(), JSON uyumlu verilere sahip temel diziler için daha basit bir alternatiftir. Lodash güçlü bir çözüm sunar, ancak harici bir bağımlılık gerektirir. En iyi yöntemi seçerken projenizin ihtiyaçlarını ve karmaşıklığını göz önünde bulundurun.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir