私はCytoscape.jsを使用しています。いくつかのノードがエッジに接続されています。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の両方)を与えます。