0

嗨,我有一个包含以下数字的数组,但是当我循环通过 eachNode 函数(迭代 13 次)时,它会重复所有列表元素 13 次。我测试了所有内容,但仍然产生错误,我是否正确执行了 for 循环?

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');
                });
            }
        }
    }
});
4

2 回答 2

1

此行是不需要的:

if (i in list)

in如果其右操作数包含由其左操作数指定的属性,则该关键字返回 true。将它与数组一起使用时,它会返回意外结果。这个关键字的行为在这种情况下是无关紧要的,所以你应该简单地把它去掉。

此外,您需要list像这样创建数组:

var list = [61, 67, 78];

...但是,当我循环eachNode(迭代 13 次)时,它会重复所有列表元素 13 次

它没有,它实际上迭代了eachNode13 次以上。您还创建了一个 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');
        });
    }
});
于 2013-04-20T23:46:24.840 回答
0

这是设计行为:

您遍历图形(如您所说的 13 次),然后在每次迭代中遍历您的数组(3 个项目)。

如果您只想在数组上循环一次,只需将其移出外循环

于 2013-04-20T23:38:04.160 回答