我使用Cytoscape.js。我有一些节点与边缘连接。查找节点之间唯一对在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)。