Sığ ve Derin Kopyalama
Coddy'nin JavaScript Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 25 / 65.
Nesneleri kopyalarken iki tür kopyalamamız vardır:
- Sığ Kopya (Shallow Copy) - yalnızca ilk seviyeyi kopyalar
- Derin Kopya (Deep Copy) - tüm iç içe geçmiş seviyeleri kopyalar
Sığ Kopyalama Yöntemleri:
Spread operatörü kullanımı:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Kaynak nesneden hedef nesneye özellikleri kopyalayarak yeni bir nesne oluşturan Object.assign() kullanımı:
const assignCopy = Object.assign({}, original);Sığ Kopyalama (Shallow Copy) ile İlgili Sorun:
original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (iç içe geçmiş nesneler referansı paylaşır)
console.log(assignCopy.b.x); // 3JSON Metotlarını ve Derin Kopyalamayı (Deep Copy) Anlamak
JSON.stringify() bir JavaScript nesnesini bir JSON dizesine dönüştürür:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() bir JSON dizesini tekrar bir JavaScript nesnesine dönüştürür:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }JSON kullanarak Derin Kopya:
const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
original.b.x = 3;
console.log(deepCopy.b.x); // 2 (tamamen bağımsız)Görev
KolayBir alışveriş sepetini temsil eden bir JSON string alan processCart adında bir fonksiyon oluşturun. Sepet, isimleri ve fiyatları olan bir ürün dizisi içerir. Göreviniz şunları yapmaktır:
- JSON string'ini bir JavaScript nesnesine dönüştürün (parse)
- Ondan İKİ ayrı sepet oluşturun
- İkinci sepette:
- Her öğeye false olarak ayarlanmış bir
discountedözelliği ekleyin pricedeğeri 50'den büyük olan tüm öğelere %10 indirim uygulayın- İndirim alan öğeler için 'discounted' değerini true olarak ayarlayın
- Her öğeye false olarak ayarlanmış bir
- Her iki sepeti de içeren bir dizi döndürün
Kopya kağıdı
Nesneleri kopyalarken iki tür kopyalamamız vardır:
- Sığ Kopya (Shallow Copy) - yalnızca ilk seviyeyi kopyalar
- Derin Kopya (Deep Copy) - tüm iç içe geçmiş seviyeleri kopyalar
Sığ Kopya Yöntemleri:
Spread operatörünü kullanma:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Object.assign() kullanma:
const assignCopy = Object.assign({}, original);Sığ Kopya ile İlgili Sorun:
original.b.x = 3;
console.log(spreadCopy.b.x); // 3 (nested objects share reference)JSON Yöntemleri:
JSON.stringify() JavaScript nesnesini JSON dizesine dönüştürür:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() JSON dizesini tekrar JavaScript nesnesine dönüştürür:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }JSON kullanarak Derin Kopya:
const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
original.b.x = 3;
console.log(deepCopy.b.x); // 2 (completely independent)Kendin dene
function processCart(jsonString) {
// Kodu buraya yazın
}
// Fonksiyonun dışına hiçbir şey yazmayınBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String TemelleriString Üzerinde YinelemeTemplate LiteralsString MetotlarıÖzet - String Weaver4JSON Bölüm 2
JSON Üzerinde Yinelemeİç İçe Geçmiş JSONJSON Optional ChainingSığ ve Derin KopyalamaÖzet - Bisiklet MağazasıÖzet - Güneş Sistemi7Kütüphane Yönetim Sistemi
Projeye Genel BakışKitap Ekleme10Festival Sistemi Yönetimi
Projeye Genel BakışFilm ve Mekan Ekle2Çok Boyutlu Diziler
2D Dizi Temelleri2D Dizi Elemanlarına Erişme2D Dizilerle İç İçe DöngülerÖzet - 2D DizilerMatris Toplama ve ÇıkarmaDüzensiz Diziler3D Diziler ve ÖtesiYaygın 2D Dizi DesenleriÖzet - Diziler Hakkında Her Şey5Kümeler Bölüm 1
Küme Nedir?Kümeler Üzerinde YinelemeEleman EklemeEleman SilmeEleman Varlığını Kontrol EtmeBoyut ve Boş Olma DurumuKopyalama ve TemizlemeÖzet - Kümelerin Temelleri8Diziler: İlginç Konular
Dizi Yapı SökümüDizilerde Spread SözdizimiSeyrek DizilerÖzet - Diziler Workshop3JSON Bölüm 1
JSON Nedir?Anahtarın Varlığını Kontrol EtmeNesne MetotlarıSpread Operatörü Bölüm 1Spread Operatörü Bölüm 2Anahtarları KaldırmaÖzet - JSON Anahtarlarını Yönetme