2013-04-20 135 views
0

嗨我有一个数组,其中包含以下数字,但是当我通过eachNode函数(迭代13次)循环时,它将重复所有列表元素13次。我测试了一切,但它仍然产生一个错误,我正在执行for循环?Javascript索引数组问题

list[61,67,78] 
var len = list.length; 

fd.graph.eachNode(function (node) { // loops thru all node id's in graph (13) 
    for (var i = 0; i < len; ++i) { 
     if (i in list) { 
      var nody = list[i]; // I put the number in a variable 
      var nodess = fd.graph.getNode(nody); //this takes the number and matches it with a node id, it "odjectify" it 
      if (node.id != nodess.id) { // if the list nodes are not the same 
       node.setData('alpha', 0); // 
       node.eachAdjacency(function (adj) { // this make the unmatched nodes disappear 
        adj.setData('alpha', 0, 'end'); 
       }); 
      } 
     } 
    } 
}); 
+1

你想用'if(我在列表中)'做什么? – 0x499602D2 2013-04-20 23:39:32

+0

这是微不足道的,我用于索引 – Squirtle 2013-04-20 23:40:32

回答

0

这是设计的行为:

您遍历图(13倍,你说的),那么每个迭代循环,你在你的阵列(3项)内。

如果你只是想一次循环在你的阵列,只是将它移出外环的

+0

我必须循环内部的原因是因为我想列表元素是对象,然后测试其他人,如果我循环外,那么我将无法测试每个list.node对象到另一个 – Squirtle 2013-04-20 23:40:03

1

此行是不需要的:如果其右操作数包含

if (i in list) 

in关键字返回true属性由其左操作数指定。在数组中使用它时,它会返回意外的结果。这个关键字的行为在这种情况下是微不足道的,所以你应该简单地把它拿出来。

此外,你需要创建list数组是这样的:

var list = [61, 67, 78]; 

...然而,当我循环,虽然eachNode(它迭代13次),它重复所有的列表元素13倍

它没有,它实际上迭代了13次,其次是eachNode。你还做了一个for循环,它将遍历list数组的长度。


既然你已经给了我更多关于你想要什么的细节,下面是更新后的代码。我希望它适用于你:

fd.graph.eachNode(function (node) { 
    var flag = false; 

    for (var i = 0; i < len; ++i) 
    { 
     var nody = list[i]; 
     var nodess = fd.graph.getNode(nody); 

     if (node.id == nodess.id) { 
      flag = true; break; 
     } 
    } 

    if (flag) 
    { 
     node.setData('alpha', 0); 
     node.eachAdjacency(function (adj) { 
      adj.setData('alpha', 0, 'end'); 
     }); 
    } 
}); 
+0

我需要使用“fd.graph.getNode()方法”将列表数组中的元素“对象化”,然后我必须将它们与图中的每个节点进行比较,但是我似乎无法弄清楚将循环嵌套在eachnode数组中以便将每个元素节点测试到每个节点。 – Squirtle 2013-04-20 23:58:33

+0

如果我向外循环,那么索引元素的变量只会给我数组中的最后一个。 – Squirtle 2013-04-20 23:59:21

+0

@Squirtle在for循环之外设置一个布尔值。然后在if区块中if(node.id!= nodess.id)'将变量设置为“true”,然后“break”。然后在for循环之外检查该布尔值是否为真。如果是,则运行该块中的原始代码。 – 0x499602D2 2013-04-21 00:07:42