【问题标题】:Length of Array in Object doesn't match对象中数组的长度不匹配
【发布时间】:2013-02-24 04:54:23
【问题描述】:

我正在尝试使用 D3 中的树层次结构并卡住了。我以为我正在正确构建 JSON,但是当我查看开发人员工具中的对象时,我看到以下内容:

请注意,第一行显示依赖数组的长度为 0,但展开后,您可以清楚地看到依赖数组有 3 个对象。当我对它进行字符串化时,我得到以下信息:

{"attributes":{"id":0,"name":"root"},"dependents":[]} 

知道有什么问题吗?谢谢!

【问题讨论】:

  • 没有错。它们代表对象在不同时间的视图。后者可能是后来的观点。此视图对您的代码没有影响。
  • ...换句话说,您可能正在正确构建它。只是不要过分依赖开发者工具中的表示。

标签: javascript jquery json d3.js


【解决方案1】:

当您在记录后更改对象时通常会发生此问题,因为 Chrome 不会在您记录该对象时对其进行深度复制,而只是存储一个引用。

树不是立即构建的,而是仅在需要时构建,有时它基于更新的值。

如果你的对象足够轻,如果你真的想在记录时看到值,你可以自己克隆它:

console.log(JSON.parse(JSON.stringify(myobject)));

如果您的对象很大或具有递归性,您可能会发现克隆它有点困难。我个人有自己的工具,JSON.prune.log

由于忽略浏览器的优化是有代价的,因此您通常应该简单地考虑这种行为,如果您想确定它们的日志记录时间值,则只记录原始数据...

【讨论】:

  • 我想当我调用 nodes 函数时,它会在更改发生之前获取对象,就像 Chrome 无法获取最新对象一样。我该如何解决?
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多