tilbage til lektionen

Ekskluder cirkulære referencer

vigtighed: 5

I simple tilfælde med cirkulære referencer kan vi ekskludere en egenskab fra serialisering ved dens navn.

Men nogle gange kan vi ikke bare bruge navnet, da det kan bruges både i cirkulære referencer og normale egenskaber. Så vi kan tjekke egenskaben ved dens værdi.

Skriv en replacer funktion der stringify'er alt, men fjerner egenskaber med reference til meetup:

let room = {
  number: 23
};

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

// circulær reference
room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  /* din kode */
}));

/* resultatet bør være:
{
  "title":"Konference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/
let room = {
  number: 23
};

let meetup = {
  title: "Konference",
  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":"Konference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/

Vi bør også teste key=="" for at ekskludere det første kald, hvor det er normalt at value er meetup.