缺少数据意味着无法显示可视化

时间:2015-09-17 12:22:37

标签: javascript d3.js

我的数据集中有一堆节点和链接。

所有链接都有源和目标属性。

但是,并非所有源节点和目标节点都在我的节点数据集中。

示例:

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

如果无法找到源/目标节点并继续显示强制布局可视化,如何不抛出错误?

1 个答案:

答案 0 :(得分:0)

管理自己解决它。基本上,因为链接指向甚至不在数据集中的节点,所以我必须仅使用在数据中同时具有源和目标的链接。

以下是:

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)检查一下。如果有,则将它们添加到edge数组中,然后使用force布局:)