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ループを使用していることを確認していると思います(他の参照の中でも、ループは逆方向で本当に高速ですか?を参照)。

単に選択を逆にすることは機能しますか?トゥイーンステップを特定の順序で適用する必要があるように、何を移行しているのかわかりません。

于 2012-09-01T17:37:32.870 に答える