这是我第一次尝试使用d3库,并且尝试使用数据库中的数据设置节点,这是我要构建的节点的示例:
{
index: 700,
name: 'The person's name'
}
来自节点的数据来自一个名为Researchers的MySql表,仅此而已是一个具有其ID和名称的人员列表:
如您所见,每个研究人员都有一个相关的数组,其中包含所有相关的研究人员,这将用于构建边缘。下面是设置图形边和节点的代码:
const g_nodes = [];
const g_edges = [];
/*For each researcher, set the edges related to that researcher*/
this.state.nodes.forEach(n => {
if (n.related.length > 0) {
n.related.forEach(r => {
g_edges.push({
source: n.id,
target: r.id,
weight: r.RelatedResearcher.cs + r.RelatedResearcher.bc
});
})
}
})
/*For each researcher set his/her node on the graph*/
this.state.nodes.forEach(n => {
g_nodes.push({
index: n.id,
name: n.name
});
})
console.log(g_edges);
console.log(g_nodes);
此图片来自console.log(g_nodes)并按预期工作:
问题在于,一旦将边缘和节点放入数据集对象中,节点的索引就会更改为数组位置,并且权重字段会出现在节点对象上:
dataset.nodes = g_nodes;
dataset.edges = g_edges;
console.log(g_edges);
console.log(g_nodes);
发生这种情况时,我从d3收到错误消息:
TypeError: "r.source is undefined"
然后我查看边缘,第一个边缘接收到的源和目标未定义:
0: Object { source: undefined, target: undefined, weight: 0.46782460000000003 }
对不起,我的英文,希望您能提供帮助。谢谢