0

我定义了一个名为 Node 的函数,它将节点的属性存储在图形数据结构中。函数是这样的:

function Node(){
    ...
    this.outEdges = [];
    this.inEdges = [];
    ...
}

inEdges 和 outEdges 存储 Edge 类型的元素,这是我定义的另一个函数。在程序期间,这些数组被元素填充。

在我的代码中的某个时刻,我需要重置这两个数组,所以我写:

    nodes[i].outEdges.length = 0;
    nodes[i].inEdges.length = 0;

其中节点是节点类型的元素数组,我正在访问 for 循环中的元素。

问题是,在将 outEdges 和 inEdges 设置为 0 后,我希望它们在节点 [i] 属性列表中是 []。但是,当我将节点 [i] 输出到控制台时,outEdges 和 inEdges 仍然包含其中的元素。奇怪的是,当我将 nodes[i].outEdges 输出到控制台时,它会打印 [] ,这是正确的,但是再次单击 [ ] 会打开元素列表!我真的无法弄清楚为什么节点 [i] 变量不会改变?

4

3 回答 3

1

发生这种情况(可能)是因为浏览器打印出空数组,但是当您检查它时,它又具有内容了。因此,当您单击展开浏览器时会显示实际内容。在此处输入图像描述

如您所见,值 [1,3,7] 是在命令之后添加的,console.log(o)但它们会显示在屏幕上(即使显示的长度是0)。

于 2013-04-26T21:19:05.647 回答
0

您不应该设置长度字段。只需重新初始化它们:

nodes[i].outEdges = [];
nodes[i].inEdges = [];

编辑:我的错,设置长度应该有效。它至少在 Chrome 上对我有用。但是,我仍然认为重新初始化是更安全、更好的风格。

于 2013-04-26T20:22:53.560 回答
-1

只需创建一个具有相同名称的新对象

nodes[i].outEdges = new Array();
于 2013-04-26T20:24:21.183 回答