Derse geri dön

Dairesel Referansları Engellemek

önem: 5

Basit dairesel referanslarda özelliğin ismi verilip seri hale getirilirken görmezden gelme işlemi yapılabilir.

Fakat bazen çok fazla dairesel referans olabilir. Ayrıca isimleri hem dairesel referanslarda hem de normal özelliklerde kullanılabilir.

degistirici fonksiyonu ile her şeyi karaktere çevirin, fakat tanisma'ya referans veren özellikleri silin:

let oda = {
  sayi: 23
};

let tanisma = {
  baslik: "Konferans",
  dolduruldu: [{adi: "Ahmet"}, {adi: "Mehmet"}],
  yer: oda
};


// dairesel referanslar
oda.dolduruldu = tanisma;
tanisma.self = tanisma;

alert( JSON.stringify(meetup, function degistirici(key, value) {
  /* Kodunuz */
}));

/* Sonuç şu şekilde olmalıdır:
{
  "baslik":"Konferans",
  "dolduruldu":[{"adi":"Ahmet"},{"adi":"Mehmet"}],
  "yer":{"sayi":23}
}
*/
let oda = {
  sayi: 23
};

let tanisma = {
  baslik: "Konferans",
  dolduruldu: [{adi: "Ahmet"}, {adi: "Mehmet"}],
  yer: oda
};

oda.dolduruldu = tanisma;
tanisma.self = tanisma;

alert( JSON.stringify(tanisma, function degistirici(anahtar, deger) {
  return (anahtar != "" && deger == tanisma) ? undefined : deger;
}));

/*
{
  "baslik":"Konferans",
  "dolduruldu":[{"adi":"Ahmet"},{"adi":"Mehmet"}],
  "yer":{"sayi":23}
}
*/

Burada anahtar =="" kontrolü de yapılmalı çünkü ilk çağrıda deger==tanisma'dır, ve anahtar boş gelir.