Я использую 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, этот подход даст два соотношения (оба A -> B и B -> A).