应用转换时的D3js排序问题

时间:2012-09-01 15:51:23

标签: javascript d3.js

我的数据集已通过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);
      });

但如果我删除延迟,请保持良好排序。

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

1 个答案:

答案 0 :(得分:0)

我认为你在观察d3.js通常使用反向迭代的“优化”for循环(参见Are loops really faster in reverse?和其他参考文献)。

是否可以简单地撤销您的选择?我不确定您要转换的内容,以便您需要按特定顺序应用补间步骤。