使用的第二个参数
stringify,该替代品的功能,以排除已序列化对象:
var seen = [];JSON.stringify(obj, function(key, val) { if (val != null && typeof val == "object") { if (seen.indexOf(val) >= 0) { return; } seen.push(val); } return val;});http://jsfiddle.net/mH6cJ/38/
正如在其他注释中正确指出的那样,此代码删除了每个“可见”对象,而不仅仅是“递归”对象。
例如,用于:
a = {x:1};obj = [a, a];结果将不正确。如果您的结构是这样的,则可能要使用Crockford的decycle或此(简单的)函数,该函数只是将递归引用替换为null:
function decycle(obj, stack = []) { if (!obj || typeof obj !== 'object') return obj; if (stack.includes(obj)) return null; let s = stack.concat([obj]); return Array.isArray(obj) ? obj.map(x => decycle(x, s)) : Object.fromEntries( Object.entries(obj) .map(([k, v]) => [k, decycle(v, s)]));}//let a = {b: [1, 2, 3]}a.b.push(a);console.log(JSON.stringify(decycle(a)))


