【问题标题】:How to detect circular structures?如何检测圆形结构?
【发布时间】:2011-03-03 15:43:13
【问题描述】:

例如这段代码:

var a = {};
a.a = a;
JSON.stringify(a);

会抛出:

TypeError: Converting circular structure to JSON

我的问题是,如何检测圆形结构?

【问题讨论】:

  • “检测”是什么意思?这一点很明显,因为在 = 之前和之后都有相同的 var
  • gnur:他的意思是,给定一个任意的数据结构,判断它是否是循环的。
  • 您还可以查看answer I posted to similar question,它提供了一个示例和一个链接 jsfiddle,您可以在其中对其进行测试。
  • 我在node 中使用express 遇到了这个错误,我这样做是为了测试:res.send(req)res.json(req)。我试图将初始请求作为响应发回 - 我对 express 的了解不够多,无法知道为什么这是无效操作或有效的替代方法。

标签: javascript


【解决方案1】:

Crockford 的JSON implementation 就是这样做的。看起来它只是在遍历对象图时保留一个列表。代码相当容易理解。

【讨论】:

  • 我仍然无法忍受 Crockford 如何在他的代码中左对齐所有 cmets。当我从上到下阅读代码时,我发现很难跟随左跳。
  • @RoatinMarth:相反,它让我在阅读代码时可以专注于代码;当我阅读文档时,我不需要阅读代码。与代码本身有关的注释与代码本身放在一起。
  • Roatin:所以把它粘贴到你的编辑器中,全选,缩进区域。为什么这值得抱怨?你本可以比写评论更快地修复它。
  • @Ken 那个函数是废话。尝试在 NodeJS 中逆向循环全局对象,它会给你一个很好的甜蜜范围错误(超出最大调用堆栈)。
【解决方案2】:

这是使用原生 JSON 检测的函数

function isCircular (d) {
  try {JSON.stringify(d)}
  catch (e) {return true}
  return false
}

【讨论】:

    猜你喜欢
    • 2017-05-24
    • 2016-06-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-12-23
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多