Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从d3力有向图的数组中删除重复边_Javascript_Node.js_D3.js - Fatal编程技术网

Javascript 从d3力有向图的数组中删除重复边

Javascript 从d3力有向图的数组中删除重复边,javascript,node.js,d3.js,Javascript,Node.js,D3.js,我有一个力定向图的边数组,看起来像这样,但长得多 var rawLinks = [{ source: 1, target: 2 }, { source: 2, target: 1 }, { source: 6, target: 7 }, { source: 7, target: 6 }, { source: 8, target: 9 },

我有一个力定向图的边数组,看起来像这样,但长得多

   var rawLinks = [{ source: 1, target: 2 },
                  { source: 2, target: 1 },
                  { source: 6, target: 7 },
                  { source: 7, target: 6 },
                  { source: 8, target: 9 },
                  { source: 8, target: 9 },
                  { source: 8, target: 86 },
                  { source: 8, target: 101 },
                  { source: 8, target: 133 },
                  { source: 8, target: 134 }]
由于这些是曲面上的点,直线将跟随这些点,因此我希望删除将导致点之间重复直线的元素

例如,我只需要前两个元素中的一个,因为它们将导致从1到2和从2到1的行。我只需要1和2之间的一行

我已经试过了,但是我得到了意想不到的结果

var links = [];

for (var i=0; i<rawLinks.length; i++) {
      for (var j=0; j<rawLinks.length; j++) {
        if(rawLinks[i].source != rawLinks[j].target && 
                     rawLinks[i].target != rawLinks[j].source){

         links.push(rawLinks[i])
        }
      }
  }   
var-links=[];

对于(var i=0;i,因为谁是源谁是目标并不重要(“1到2”与您的问题中的“2到1”相同),我们将首先重新组织数组:

rawLinks.forEach(function(d){
    var sourceTemp = d.source, targetTemp = d.target;
    if(d.source > d.target){
        d.source = targetTemp;
        d.target = sourceTemp;
    }
});
这样会创建重复项,如下所示:

{ source: 1, target: 2 }
{ source: 1, target: 2 }    
然后,我们删除重复项:

function removeDups(myArray){
    myArray.sort();
    for(var i = 1; i < myArray.length; ){
        if(myArray[i-1].source === myArray[i].source 
           && myArray[i-1].target === myArray[i].target){
            myArray.splice(i, 1);
        } else {
            i++;
        }
    }
    return myArray;
}
函数removeDups(myArray){
myArray.sort();
对于(变量i=1;i
下面是一个演示:

var rawLinks=[{source:1,target:2},
{来源:2,目标:1},
{来源:6,目标:7},
{来源:7,目标:6},
{来源:8,目标:9},
{来源:8,目标:9},
{来源:8,目标:86},
{来源:8,目标:101},
{来源:8,目标:133},
{来源:8,目标:134}];
rawLinks.forEach(函数(d){
var sourceTemp=d.source;targetTemp=d.target;
如果(d源>d目标){
d、 来源=targetTemp;
d、 目标=源温度;
}
});
函数removeDups(myArray){
myArray.sort();
对于(变量i=1;i