从d3有向图的数组中移除重复的边
Removing duplicate edges from an array for a d3 force directed graph
我有一个力有向图的边数组,它看起来像这样,但更长。
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])
}
}
}
我很确定我的if语句是问题所在。或者这是完全错误的方法?
像往常一样,我相信这对新手来说是显而易见的。我的代码有什么问题?既然谁是源谁是目标并不重要("1 to 2"与你的问题中的"2 to 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;
}
下面是一个示例:
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 }];
rawLinks.forEach(function(d){
var sourceTemp = d.source; targetTemp = d.target;
if(d.source > d.target){
d.source = targetTemp;
d.target = sourceTemp;
}
});
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(rawLinks);
console.log(rawLinks);
相关文章:
- 如何在d3力有向图中最初限制节点数
- 如何在Vis JS有向图中逐个显示节点
- D3有向图中链接动画的速度问题
- D3 AngularJs力有向图
- 在有向图中循环SVG圆
- 强制有向图和本地存储
- 如何使用dagred3.js(javascript库)将点击事件添加到有向图中
- 在Javascript Infovis工具/强制有向图中改变节点形状
- 如何防止力有向图中链接的重叠
- 在d3js的力有向图的链接上显示工具提示
- 缩放到D3强制有向图上的点击节点
- 缩放D3力向图不使用鼠标滚轮
- D3力有向图问题:节点堆叠在坐标(0,0)
- 从d3有向图的数组中移除重复的边
- 什么是“价值”?用d3表示力有向图
- 加载JSON对象到D3力有向图
- D3 js力有向图-突出两点之间的路径
- 为什么我不能得到D3强制有向图链接标签的工作
- D3.js箭头有向图:添加节点/链接的飞行
- 使用d3.js强制有向图