You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript图结构控制台输出异常:展开对象后数据不符

控制台打印图对象异常的原因与解决办法

问题原因

这是浏览器控制台对引用类型的延迟解析机制导致的:

  • 执行console.log时,控制台并不会立即完整读取并保存对象的所有内容,只是记录了对象的内存引用。
  • 你看到的初始摘要(比如{tokyo: Array(1), dallas: Array(2), aspen: Array(1)})是打印瞬间的状态快照,但当你点击展开对象时,控制台才会去读取该对象的当前实时状态——此时你已经执行了removeEdge修改了对象,所以两次展开后看到的都是修改后的结果。

解决方案

要获取打印瞬间的真实状态,需要生成对象的独立快照,避免后续修改影响显示,以下两种方法适用你的场景:

方法1:JSON序列化生成深拷贝

利用JSON.stringify和JSON.parse创建对象的深拷贝快照,完全隔离后续修改:

// 打印移除边前的快照
console.log(JSON.parse(JSON.stringify(graph.adjacencyList)));

graph.removeEdge("dallas", "tokyo");

// 打印移除边后的快照
console.log(JSON.parse(JSON.stringify(graph.adjacencyList)));

该方法适用于所有可JSON序列化的数据结构,你的图结构完全符合要求。

方法2:手动生成结构快照

针对你的邻接表结构,通过展开运算符对每个数组做拷贝,生成独立的对象快照:

// 打印移除边前的快照
console.log(Object.fromEntries(
  Object.entries(graph.adjacencyList).map(([vertex, edges]) => [vertex, [...edges]])
));

graph.removeEdge("dallas", "tokyo");

// 打印移除边后的快照
console.log(Object.fromEntries(
  Object.entries(graph.adjacencyList).map(([vertex, edges]) => [vertex, [...edges]])
));

这种方法更灵活,适合无法用JSON序列化的复杂数据场景。

内容的提问来源于stack exchange,提问作者Naresh M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:28:23