我正在使用Cytoscape.js。我有一些与边缘相连的节点。
我想遍历两个节点之间的每个连接。问题是在某些情况下,两个节点之间有多个边,所以我不能只说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
}
});
});
但这不是一种愚蠢的方法,因为它们中的许多人之间没有边缘吗?如果我有两个节点 A 和 B,这种方法将给出 2 个关系(A -> B 和 B -> A)。