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回以上繰り返されます。listまた、配列をその長さでトラバースする for ループも作成しました。


あなたが望むものについてもっと詳しく教えてくれたので、ここに更新されたコードがあります。私はそれがあなたのために働くことを願っています:

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 に答える