Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@Trindaz
Created January 28, 2013 04:44
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Trindaz/4653128 to your computer and use it in GitHub Desktop.
Save Trindaz/4653128 to your computer and use it in GitHub Desktop.
Circular reference JSON.stringify wrapper
var repeatingArray = [4, 5, 6];
var circularObj = {
a: 1,
b: 1,
c: "an allowed repeating string",
d: "an allowed repeating string",
e: repeatingArray,
f: repeatingArray,
g: [
repeatingArray,
repeatingArray
]
};
circularObj.h = circularObj;
var myObj = {
co: circularObj
};
function stringifyOnce(obj, replacer, indent){
var printedObjects = [];
var printedObjectKeys = [];
function printOnceReplacer(key, value){
var printedObjIndex = false;
printedObjects.forEach(function(obj, index){
if(obj===value){
printedObjIndex = index;
}
});
if(printedObjIndex && typeof(value)=="object"){
return "(see " + value.constructor.name.toLowerCase() + " with key " + printedObjectKeys[printedObjIndex] + ")";
}else{
var qualifiedKey = key || "(empty key)";
printedObjects.push(value);
printedObjectKeys.push(qualifiedKey);
if(replacer){
return replacer(key, value);
}else{
return value;
}
}
}
return JSON.stringify(obj, printOnceReplacer, indent);
}
console.log(stringifyOnce(myObj, undefined, 4));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment