在d3.js中对选择进行排序会干扰数据连接

Mar*_*ark 10 d3.js

当我使用selection.sort()重新排序d3中的路径选择时,数据连接受到干扰,我的路径被重新分配给错误的数据对象.

我只想重新排序路径,以便某些路径最终位于其他路径之上(如在z-index中).我不想将数据对象从一个路径重新分配给另一个路径.

如何在不干扰数据连接的情况下重新排序路径?

_friends.selectAll('path').sort(function(a, b){
  return d3.ascending(a.Q, b.Q);
});
Run Code Online (Sandbox Code Playgroud)

Jas*_*ies 12

听起来你需要指定一个关键功能.这允许您通过任意键绑定数据,而不是依赖于默认值,即使用数据在数组中的位置,即顺序(在您的情况下可能会更改).

如果您还没有每个数据的唯一键,则始终可以在加载时生成它们:

var id = 0;
for (var i = 0; i < data.length; i++) data[i].id = id++;
Run Code Online (Sandbox Code Playgroud)

如果您创建任何新数据,则可以继续增加id以获取新的唯一ID.

然后,对于数据绑定,您可以:

.data(data, function(d) { return d.id; })
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅[关于对象恒定性的教程](http://bost.ocks.org/mike/constancy/),其中讨论了关键功能. (3认同)