Javascript 应用转换时的D3js排序问题

Javascript 应用转换时的D3js排序问题,javascript,d3.js,Javascript,D3.js,我有一个数据集已经通过d.id绑定到svg:g var categorized = g1.selectAll("g.node") .data(dataset, function(d){return d.id}) .classed('filtered', false); categorized.enter() .append("g") .attr("class", "node

我有一个数据集已经通过
d.id
绑定到
svg:g

var categorized = g1.selectAll("g.node")
                    .data(dataset, function(d){return d.id})
                    .classed('filtered', false);
categorized.enter()
           .append("g")
           .attr("class", "node")
...
我使用函数从如下数据值对其进行排序:

var sorted = dataset
                 .filter(function(d) { return d.notation[3].value >=50 } )
                 .sort(function(a, b) { return d3.descending(a.notation[3].value,
                                        b.notation[3].value) });
当I
console.log
It时,它返回正确的顺序

var filtered = g1.selectAll("g.node")
                 .data(sorted, function(d) {return d.id})
                 .classed('filtered', true);
如果I
console.log
it, 但如果我应用延迟,它会颠倒结果顺序

scored.transition()
      .delay(500).duration(1000)
      .attr("id", function(d) {
          console.log(d.id);
      });
但是如果我消除了延迟,它会保持良好的排序


我的问题:我是不是做得不好?

我想您已经注意到d3.js通常使用“优化”for循环,循环以相反的方式迭代(请参阅其他参考资料)


简单地反转选择是否有效?我不确定您正在转换什么,因此您需要按特定顺序应用这两个步骤。

谢谢您的回答。我试着把它倒过来,因为我也在一个不需要倒过来的列表中使用它。。。因为没有任何延迟。我不想在这一点上对我的代码做太多的调整。现在我正在毫不拖延地使用它。但是我仍然想知道为什么延迟会导致订单改变。。。你的意思是优化for循环将在延迟fn中?我以前没有使用过
delay
。这是不是将
得分中每个元素的转换错开500毫秒,从而使相反的顺序变得明显?我认为它会将所有的事情延迟500毫秒,然后立即启动它们。优化的for循环在d3中无处不在。延迟应用于转换,事实上它将循环移动到另一个坐标,结果是我的循环从最好的分数到最低的顺序被颠倒。是的,他们同时开火。我在其他圈子的退出过渡期耽搁了。我明白了。你能把代码贴在你设置坐标的地方吗?或者所有相关的代码?听起来问题出在别处了。