我的数据集中有一堆节点和链接。
所有的链接都有一个source和target属性。
然而,并不是所有的源节点和目标节点都在我的节点数据集中。
示例:
nodes : {
'id' : 'A'
},
{
'id' : 'B'
},
{
'id' : 'C'
};
links : {
'source' : 'A',
'target' : 'B'
},
{
'source' : 'B',
'target' : 'C'
},
{
'source' : 'C',
'target' : 'D'
}
注意最后一个链接链接了节点'C'和'D',但我没有ID为'D'的节点。
所以我得到以下错误:
Cannot read property 'weight' of undefined
如果无法找到源/目标节点并继续显示力布局可视化,我如何去不抛出错误?
我自己解决了。基本上,因为链接指向的节点甚至不在数据集中,所以我只能使用数据中同时包含源和目标的链接。
方法如下:
var edges = [];
links.forEach(function(e,i) {
console.log(links.length)
var sourceNode = nodes.filter(function(n) { return n.id === e.source; })[0],
targetNode = nodes.filter(function(n) { return n.id === e.target; })[0];
if(sourceNode && targetNode){ //this is to make sure both the source and target node are not undefined
edges.push({source: sourceNode, target: targetNode, origin : e.origin});
}
});
基本上,我必须创建另一个数组来使用(边),并使用具有源节点和目标节点的链接填充该数组。
检查:if(sourceNode && targetNode)
检查此。如果它们有,那么它们被添加到边缘数组中,然后我使用强制布局:)