通过记录ID定义节点索引

时间:2018-10-05 14:25:57

标签: javascript d3.js d3-force-directed

我正在尝试使用以下示例使用d3构建图形:enter image description here

这是我第一次尝试使用d3库,并且尝试使用数据库中的数据设置节点,这是我要构建的节点的示例:

{
  index: 700,
  name: 'The person's name'
}

来自节点的数据来自一个名为Researchers的MySql表,仅此而已是一个具有其ID和名称的人员列表: enter image description here

如您所见,每个研究人员都有一个相关的数组,其中包含所有相关的研究人员,这将用于构建边缘。下面是设置图形边和节点的代码:

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)并按预期工作: enter image description here

问题在于,一旦将边缘和节点放入数据集对象中,节点的索引就会更改为数组位置,并且权重字段会出现在节点对象上:

dataset.nodes = g_nodes;
dataset.edges = g_edges;
console.log(g_edges);
console.log(g_nodes);

WebWorkers

发生这种情况时,我从d3收到错误消息:

TypeError: "r.source is undefined"

然后我查看边缘,第一个边缘接收到的源和目标未定义:

0: Object { source: undefined, target: undefined, weight: 0.46782460000000003 }

对不起,我的英文,希望您能提供帮助。谢谢

0 个答案:

没有答案