Javascript VisJs-获取特定节点的边数

Javascript VisJs-获取特定节点的边数,javascript,vis.js,Javascript,Vis.js,我想在visjs/javascript中找到连接到特定节点的边的数量 为了说明我的需要,我制作了以下示例: <html> <head> <title>Get number of edges of a specific node</title> <script type="text/javascript" src="/home/altug/Downloads/BTAGViewer/libs/visjs/vis.min.js"&g

我想在visjs/javascript中找到连接到特定节点的边的数量

为了说明我的需要,我制作了以下示例:

<html>
<head>
    <title>Get number of edges of a specific node</title>
    <script type="text/javascript" src="/home/altug/Downloads/BTAGViewer/libs/visjs/vis.min.js"></script>
</head>
<body>
    <div id="mynetwork"></div>
    <script type="text/javascript">
      // create an array with nodes
      var nodes = new vis.DataSet([
        {id: "A", label: 'label A'},
        {id: "B", label: 'label B'},
        {id: "C", label: 'label C'},
        {id: "D", label: 'label D'},
        {id: "E", label: 'label E'}
      ]);

      // create an array with edges
      var edges = new vis.DataSet([
        {from: "A", to: "C"},
        {from: "A", to: "B"},
        {from: "B", to: "D"},
        {from: "B", to: "E"}
      ]);

      // create a network
      var container = document.getElementById('mynetwork');
      var data = {
        nodes: nodes,
        edges: edges
      };
      var options = {};
      var network = new vis.Network(container, data, options);

      var some_id = "B";
      var some_node = nodes.get(some_id);
      console.dir(some_node);

      console.log(/*magically retrieve the number of edges for node "B" ---> 3 (for this graph)*/);
    </script>
</body>

获取特定节点的边数
//创建一个包含节点的数组
var节点=新的vis.DataSet([
{id:“A”,label:“label A'},
{id:“B”,标签:'label B'},
{id:“C”,标签:'label C'},
{id:“D”,标签:'label D'},
{id:“E”,标签:'label E'}
]);
//创建具有边的阵列
var edges=new vis.DataSet([
{从“A”到“C”},
{从“A”到“B”},
{从“B”到“D”},
{从“B”到“E”}
]);
//创建网络
var container=document.getElementById('mynetwork');
风险值数据={
节点:节点,
边缘:边缘
};
var选项={};
var网络=新的可视网络(容器、数据、选项);
var some_id=“B”;
var some_node=nodes.get(some_id);
console.dir(some_节点);
log(/*神奇地检索节点“B”-->3(对于此图)*/)的边数;

我知道我可以迭代边并计算特定节点id的出现次数,例如:

for(var i = 0; i < edges.get().length; i++){
    ...
}
for(var i=0;i

但是使用vis.js内置功能是否还有另一种可能性呢?

这种逻辑确实很容易自己实现,vis.js中没有内置功能。有很多不同的用例需要稍微不同的算法,所以我们认为最好由您自己决定,只需利用JavaScript的灵活性即可

在您的情况下,您确实可以只过滤具有要查找的节点ID的边:

function getEdgesOfNode(nodeId) {
  return edges.get().filter(function (edge) {
    return edge.from === nodeId || edge.to === nodeId;
  });
}

对于试图获得连接两个节点的边的用户:

function getEdgeBetweenNodes(node1,node2) {
    return edges.get().filter(function (edge) {
        return (edge.from === node1 && edge.to === node2 )|| (edge.from === node2 && edge.to === node1);
    });
};

其他建议的方法迭代网络中的所有边,只查看边数据集。但是网络数据集本身提供了一个
getconnectedges()
函数,当指定
nodeId
时返回一个边缘ID数组。所以为了得到你的计数,只是

network.getConnectedEdges(nodeId).length  
其中nodeId是您感兴趣的节点的id

从内部看,节点和边是由
[nodeId]
直接访问的,无需进行迭代,因此像
getconnectedges(nodeId)
这样的函数中的访问时间应该大致恒定,而不是边数的线性

这将在大型网络中产生巨大的差异