当我使用 selection.sort() 对 d3 中的路径选择重新排序时,数据连接受到干扰,并且我的路径被重新分配给错误的数据对象。
我只想对路径进行重新排序,以使某些路径位于其他路径之上(如 z-index 中)。我不想将数据对象从一条路径重新分配到另一条路径。
如何在不干扰数据连接的情况下重新排序路径?
_friends.selectAll('path').sort(function(a, b){
return d3.ascending(a.Q, b.Q);
});
当我使用 selection.sort() 对 d3 中的路径选择重新排序时,数据连接受到干扰,并且我的路径被重新分配给错误的数据对象。
我只想对路径进行重新排序,以使某些路径位于其他路径之上(如 z-index 中)。我不想将数据对象从一条路径重新分配到另一条路径。
如何在不干扰数据连接的情况下重新排序路径?
_friends.selectAll('path').sort(function(a, b){
return d3.ascending(a.Q, b.Q);
});
听起来您需要指定一个键功能。这允许您通过任意键绑定数据,而不是依赖默认值,即使用数据在数组中的位置,即顺序(在您的情况下可能会更改)。
如果您还没有每个数据的唯一键,您总是可以在加载时生成它们:
var id = 0;
for (var i = 0; i < data.length; i++) data[i].id = id++;
如果您创建任何新数据,您可以继续递增id
以获取新的唯一 ID。
然后,对于数据绑定,您可以执行以下操作:
.data(data, function(d) { return d.id; })