بازگشت به درس

مرجع‌های بازگشتی را حذف کنید

اهمیت: 5

در موارد ساده‌ای از مرجع‌های دایره‌ای، ما می‌توانیم یک ویژگی متخلف را توسط اسم آن از سریالی کردن منع کنیم.

اما گاهی اوقات به دلیل اینکه ممکن است هم در مرجع‌های دایره‌ای و هم در ویژگی‌های عادی استفاده شده باشد، نمی‌توانیم از اسم آن استفاده کنیم. پس می‌توانیم ویژگی را با استفاده از مقدار آن بررسی کنیم.

تابع replacer بنویسید که هر چیزی را به رشته تبدیل کند اما ویژگی‌هایی که به meetup رجوع می‌کنند را حذف کند:

let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

// circular references
room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  /* کد شما */
}));

/* :نتیجه باید اینگونه باشد
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/
let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  return (key != "" && value == meetup) ? undefined : value;
}));

/*
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/

همچنین اینجا ما نیاز داریم که key=="" را بررسی کنیم تا اولین فراخوانی که طبیعتا value برابر با meetup است را حذف کنیم.