Cytoscape.jsを使用しています。エッジに接続されたノードがいくつかあります。
2 つのノード間の各接続をループしたい。問題は、場合によっては 2 つのノード間に複数のエッジがあることcy.edges().forEach()
です。そのため、必要以上のエッジをループすることになるため、一概には言えません。
私ができることは、次のようなことを言うことです
const alreadyVisited = [];
cy.edges().forEach(edge => {
const key1 = edge.source() + '-' + edge.target();
const key2 = edge.target() + '-' + edge.source();
if (alreadyVisited.indexOf(key1) === -1 && alreadyVisited.indexOf(key2)) {
// ...
alreadyVisited.push(key1);
alreadyVisited.push(key2);
}
})
しかし、それは少しばかげているようです。Cytoscape には 、 、 などの機能がありますedges.parallelEdges()
。nodes.connectedEdges()
それらeles.neighborhood()
の機能を利用して問題を解決できないでしょうか?
と の両方を持つ理由key1
はkey2
、エッジの方向が重要でないことを確認する方法を知らなかったからです。
編集
あるいは、次のようなこともできます
cy.nodes().forEach(node1 => {
cy.nodes().forEach(node2 => {
if (node1 !== node2) {
// now I have each pair
}
});
});
しかし、それらの多くはそれらの間にエッジがないため、それは愚かなアプローチでもありませんか? そして、2 つのノード A と B がある場合、このアプローチでは 2 つの関係 (A -> B と B -> A の両方) が得られます。