Поиск уникальных пар между узлами в 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).


person Jamgreen    schedule 20.11.2016    source источник


Ответы (1)