0

私はそれを間違って理解していますか?またはそれはそのようになっているのですか?

元のサークル

d3.select("svg").selectAll('circle')
.data([{'name':'john', 'age': '50'}]).enter().append('circle')
.attr("cx", function(d){return d.age;}).attr("cy", '200').attr("r", '10').attr("fill",    'red');

クリックボタンで下の関数と呼ばれる

function prependValue(){
    d3.select("svg").selectAll('circle')
    .data([{'name':'peter', 'age': '100'}, {'name':'john', 'age': '50'} ])
    .enter().append('circle').attr("cx", function(d){return d.age;}).attr("cy", '200').attr("r", '10').attr("fill", 'green');
}

ピーターの場合はcx=100に緑色の円を追加する必要があると思いますが、ジョンの円の色は緑色に変わります。

私が行った場合

.data([{'name':'john', 'age': '50'}, {'name':'peter', 'age': '100'} ])

すべてが期待どおりに機能します。

4

2 に答える 2

0

データ要素の照合に使用する関数(へのオプションの引数)を指定しない場合.data()、D3は要素をインデックスで照合します。つまり、実際には、同じ順序で要素を渡すことを前提としています。

これを防ぐには、要素の照合方法(名前など)を指示する関数を渡します。詳細については、ドキュメントを参照してください。

于 2013-01-11T20:38:46.880 に答える
0

ここで、参加がどのように機能するのか疑問に思われる場合に備えて、Googleグループでのこの質問に対するマイクの回答を引用しました。「名前で参加する場合はキー関数を指定する必要があります。それ以外の場合、デフォルトの動作はインデックスで参加します。

http://bost.ocks.org/mike/constancy/ https://github.com/mbostock/d3/wiki/Selections#wiki-data

マイク」

于 2013-01-11T20:46:13.153 に答える