zpět k lekci

Vyřaďte zpětné odkazy

důležitost: 5

V jednoduchých případech kruhových odkazů můžeme závadnou vlastnost vyřadit ze serializace podle jejího názvu.

Někdy však nemůžeme použít jen název, protože stejný název může být použit jak v kruhových odkazech, tak v normálních vlastnostech. Můžeme tedy zkontrolovat vlastnost podle její hodnoty.

Napište funkci nahrazení, která zřetězí všechno, ale odstraní vlastnosti, které se odkazují na mítink:

let místnost = {
  číslo: 23
};

let mítink = {
  titul: "Konference",
  obsazenoČím: [{jméno: "Jan"}, {jméno: "Alice"}],
  místo: místnost
};

// kruhové odkazy
místnost.obsazenoČím = mítink;
mítink.onSám = mítink;

alert( JSON.stringify(mítink, function nahrazení(klíč, hodnota) {
  /* váš kód */
}));

/* výsledek by měl být:
{
  "titul":"Konference",
  "obsazenoČím":[{"jméno":"Jan"},{"jméno":"Alice"}],
  "místo":{"číslo":23}
}
*/
let místnost = {
  číslo: 23
};

let mítink = {
  titul: "Konference",
  obsazenoČím: [{jméno: "Jan"}, {jméno: "Alice"}],
  místo: místnost
};

místnost.obsazenoČím = mítink;
mítink.onSám = mítink;

alert( JSON.stringify(mítink, function nahrazení(klíč, hodnota) {
  return (klíč != "" && hodnota == mítink) ? undefined : hodnota;
}));

/*
{
  "titul":"Konference",
  "obsazenoČím":[{"jméno":"Jan"},{"jméno":"Alice"}],
  "místo":{"číslo":23}
}
*/

Zde musíme testovat i to, zda klíč=="", abychom vyloučili první volání, kde je v pořádku, že hodnota je mítink.