Ми хочемо зробити цей проєкт з відкритим кодом доступним для людей у всьому світі.

Допоможіть перекласти цей підручник вашою мовою!

назад до уроку

Виключити зворотні посилання

важливість: 5

У простих випадках циклічних посиланнь ми можемо виключити від серіалізації властивість, через яку воно виникло, за її ім’ям.

Але іноді ми не можемо просто використовувати назву, оскільки вона може використовуватися як і у циклічних посиланнях, так і в звичайних, потрібних нам, властивостях. Таким чином, ми можемо перевірити властивість за її значенням.

Напишіть функцію replacer, щоб серіалізувати все, але видалити властивості, які посилаються на meetup:

let room = { number: 23 }; let meetup = { title: "Конференція", occupiedBy: [{name: "Іван"}, {name: "Аліса"}], place: room }; // циклічне посилання room.occupiedBy = meetup; meetup.self = meetup; alert( JSON.stringify(meetup, function replacer(key, value) { /* ваш код */ })); /* результат повинен бути: { "title":"Конференція", "occupiedBy":[{"name":"Іван"},{"name":"Аліса"}], "place":{"number":23} } */
let room = { number: 23 }; let meetup = { title: "Конференція", occupiedBy: [{name: "Іван"}, {name: "Аліса"}], place: room }; room.occupiedBy = meetup; meetup.self = meetup; alert( JSON.stringify(meetup, function replacer(key, value) { return (key != "" && value == meetup) ? undefined : value; })); /* { "title":"Конференція", "occupiedBy":[{"name":"Іван"},{"name":"Аліса"}], "place":{"number":23} } */

Тут нам також потрібно перевірити key=="", щоб виключити перший виклик, де значення value рівне meetup.