Skip to content

Latest commit

 

History

History
34 lines (28 loc) · 1.01 KB

stringifyCircularJSON.md

File metadata and controls

34 lines (28 loc) · 1.01 KB
标题 标签
stringifyCircularJSON(将循环对象序列化成字符串) object(对象)

将包含循环引用的 JSON 对象序列化为 JSON 格式。

  • 使用 WeakSet.prototype.add() 和 WeakSet.prototype.has() 创建一个 WeakSet 来存储和检查可见值。
  • 将 JSON.stringify() 与自定义替换函数一起使用,该函数会省略已经看到的值,并根据需要添加新值。
  • ⚠️ 注意:此函数查找并删除循环引用,这会导致序列化 JSON 中的循环数据丢失。
const stringifyCircularJSON = obj => {
  const seen = new WeakSet();
  return JSON.stringify(obj, (v, k) => {
    if (v !== null && typeof v === 'object') {
      if (seen.has(v)) {
        return;
      }
      seen.add(v);
    }
    return v;
  });
};

调用方式:

const obj = { n: 42 };
obj.obj = obj;
stringifyCircularJSON(obj); // '{"n": 42}'

应用场景