Converting circular structure to JSON

831 阅读1分钟

循环引用的对象,JSON.stringify报错


function circularObjStringify(circularObj){
	var cache = [];
	var str = JSON.stringify(circularObj, function(key, value) {
	    if (typeof value === 'object' && value !== null) {
	        if (cache.indexOf(value) !== -1) {
	            // 移除
	            return;
	        }
	        // 收集所有的值
	        cache.push(value);
	    }
	    return value;
	});
	cache = null; // 清空变量,便于垃圾回收机制回收

	return str // 移除掉循环引用的 JSON.stringify
}

示例

let b = {a:2};
b.b = b;
console.log(circularObjStringify(b))// {"a":2}

console.log(JSON.stringify(b)) // TypeError: Converting circular structure to JSON