Javascript d3.js可折叠力图-分配唯一ID';s到相同的节点

Javascript d3.js可折叠力图-分配唯一ID';s到相同的节点,javascript,d3.js,Javascript,D3.js,我有一个很好的可折叠的力量布局,从一开始就被折叠了 以下是我的例子: 当所有节点都有唯一的名称()时,它工作得很好,但是一旦一些节点有相同的名称(不幸的是,我需要这个名称),折叠就不能正常工作 有人能帮我为相同的节点名称分配唯一的ID吗?我相信这段代码可以成功,但我不知道在哪里插入它 node.each(function(d,i){ // use i to iterate through d.uniqueID = uniqueNode + i; } 我在上一篇文章中试图解决这个问题,但没有

我有一个很好的可折叠的力量布局,从一开始就被折叠了

以下是我的例子:

当所有节点都有唯一的名称()时,它工作得很好,但是一旦一些节点有相同的名称(不幸的是,我需要这个名称),折叠就不能正常工作

有人能帮我为相同的节点名称分配唯一的ID吗?我相信这段代码可以成功,但我不知道在哪里插入它

node.each(function(d,i){ // use i to iterate through
  d.uniqueID = uniqueNode + i;
}
我在上一篇文章中试图解决这个问题,但没有成功


感谢您的帮助

这样做可以使所有节点都是唯一的。我建议在展平节点之后,但在将节点插入力定向图之前,执行此操作:

功能更新(d){

在这些节点上使用
.data()
时,还需要更新键函数

  // Update nodes
  node = node.data(nodes, function(d) { return d.uniqueID; });
但是,您需要注意,如果更改数据,则绑定可能是错误的。如果要插入新值,则会将所有索引按1的顺序推离,这可能会导致将来数据连接到错误的元素

解决该问题的一种可能的不同方法是,将键函数更改为也查看直接父级(或多个父级)的ID

  // Update nodes
  node = node.data(nodes, function(d) { return d.uniqueID; });