1

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

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) });

当我返回正确的console.log顺序

var filtered = g1.selectAll("g.node")
                 .data(sorted, function(d) {return d.id})
                 .classed('filtered', true);

如果我这样做,仍然是正确的顺序console.log,但是如果我应用延迟,它会反转结果顺序

scored.transition()
      .delay(500).duration(1000)
      .attr("id", function(d) {
          console.log(d.id);
      });

但如果我消除延迟,它会保持良好的排序。

我的问题:我是不是在做坏事?

4

1 回答 1

0

我认为您观察到 d3.js 通常使用反向迭代的“优化” for 循环(请参阅Are loops really faster in reverse?以及其他参考资料)。

简单地颠倒您的选择会起作用吗?我不确定您正在转换什么,因此您需要以特定顺序应用补间步骤。

于 2012-09-01T17:37:32.870 回答