Takip et

JavaScript’te Nesneleri Kopyalama Yöntemleri

JavaScript’te nesneleri kopyalamak için genellikle üç seçeneğiniz vardır: assignment operator (=)referans amaçlı kopyalamayı kullanmak, Object.assign()veya gibi yöntemleri kullanarak spread operator (...)sığ bir kopya gerçekleştirmek ve JSON.parse() and JSON.stringify().

1. Referans Kopyası (Atama Operatörü =):

const originalObject = { key: 'value' };
const referenceCopy = originalObject;

Bu yöntemde, referenceCopy artık orijinalObject ile aynı nesneye işaret ediyor. Birinde yapılan değişiklik diğerini de etkileyecektir. Bu yöntem orijinal nesneye bir referans oluşturur. Orijinal nesnede yapılan değişiklikler kopyalanan nesneye yansıtılacaktır ve bunun tersi de geçerlidir. Bu gerçek bir kopya değil; bunun yerine her iki değişken de aynı nesneye işaret eder.

2. Sığ Kopya (Shallow):

A. Object.sign()’ı kullanma:

const originalObject = { key: 'value' };
const shallowCopy = Object.assign({}, originalObject);

Object.assign()nesnenin sığ bir kopyasını oluşturur. Numaralandırılabilir özellikleri bir veya daha fazla kaynak nesneden bir hedef nesneye kopyalar. Yukarıdaki örnekte boş bir nesne {}hedef görevi görür ve originalObjectkaynaktır. Yuvalanmış nesnelere hâlâ referans verildiğini, dolayısıyla orijinaldeki yuvalanmış nesnelerde yapılan değişikliklerin kopyalanan nesneyi etkileyeceğini unutmayın.

B. Spread Operatörünü Kullanma (…):

const originalObject = { key: 'value' };
const shallowCopy = { ...originalObject };

Yayılma operatörü, nesnelerin yüzeysel kopyalarını oluşturmanın kısa bir yoludur. gibi Object.assign(), yalnızca üst düzey özelliklerin bir kopyasını oluşturur. İç içe geçmiş nesnelere hâlâ başvurulmaktadır, dolayısıyla orijinaldeki iç içe geçmiş nesnelerde yapılan değişiklikler kopyalanan nesneyi etkileyecektir.

Bu yöntemlerin her ikisi de nesnenin yalnızca üst düzey özelliklerini kopyalayarak yüzeysel bir kopya oluşturur. Yuvalanmış nesnelerde yapılan değişiklikler hem orijinale hem de kopyaya yansıtılacaktır.

3. Derin Kopya (Deep):

JSON.parse() ve JSON.stringify()’ı kullanma

const originalObject = { key: 'value', nested: { key2: 'value2' } };

// Using JSON.parse() and JSON.stringify()
const deepCopy = JSON.parse(JSON.stringify(originalObject));

Bu yöntem, iç içe geçmiş yapılar da dahil olmak üzere nesnenin derin bir kopyasını oluşturur. Bu yaklaşımın, JSON açısından güvenli olmayan verileri korumama ve büyük veya karmaşık nesneler için daha az verimli olma gibi sınırlamaları olduğunu unutmayın.

Özel koşullarınıza bağlı olarak uygun yaklaşımı seçin:

  • Referans Kopyası (=): Her iki değişkenin de aynı nesneye referans vermesini istediğinizde kullanın.
  • Sığ Kopya (Object.sign() veya Spread Operator): Üst düzey özelliklerin bir kopyasına ihtiyaç duyduğunuzda ve iç içe geçmiş nesnelerin paylaşılmasıyla ilgilenmediğinizde kullanın.
  • Derin Kopya (JSON.parse() ve JSON.stringify()): İç içe yapılar da dahil olmak üzere tamamen bağımsız bir kopyaya ihtiyaç duyduğunuzda kullanın. JSON açısından güvenli olmayan verilerle ilgili sınırlamalara karşı dikkatli olun.

Örneklere bir bakış

let product = {
    id: 1,
    name: 'Smartphone',
    price: 499.99,
    details: {
        brand: 'TechCo',
        model: 'SmartX1',
        specifications: {
            display: '6.2 inches',
            camera: '12 MP',
            storage: '64 GB'
        }
    }
};

// Yayılma operatörünü kullanarak sığ kopyalama
let copiedProduct = { ...product };

copiedProduct.name = 'Smartwatch'; // Disconnected

// İç içe geçmiş nesnedeki değişiklikler bağlantılıdır
copiedProduct.details.model = 'WatchPro';
copiedProduct.details.specifications.display = '1.3 inches';

console.log("Shallow Copy - Copied Product:", copiedProduct);
console.log("Shallow Copy - Original Product:", product);

// Derin Kopya Örneği
let productDeep = {
    id: 1,
    name: 'Smartphone',
    price: 499.99,
    details: {
        brand: 'TechCo',
        model: 'SmartX1',
        specifications: {
            display: '6.2 inches',
            camera: '12 MP',
            storage: '64 GB'
        }
    }
};

// JSON yöntemlerini kullanarak derin kopyalama
let copiedProductDeep = JSON.parse(JSON.stringify(productDeep));

copiedProductDeep.name = 'Laptop'; // Disconnected

// İç içe geçmiş nesnedeki değişikliklerin de bağlantısı kesilir
copiedProductDeep.details.model = 'LaptopPro';
copiedProductDeep.details.specifications.display = '15.6 inches';

console.log("Deep Copy - Copied Product:", copiedProductDeep);
console.log("Deep Copy - Original Product:", productDeep);

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.