2012-07-15 4 views
9

d3でselection.sort()を使用してパスの選択を並べ替えると、データ結合が妨げられ、パスが間違ったデータオブジェクトに再割り当てされます。d3.jsの選択項目をソートすると、データ結合が妨げられます

(z-indexのように)あるものが他のものの上にくるように、パスの順序を変更したいだけです。あるパスから別のパスにデータオブジェクトを再割り当てする必要はありません。

データ結合に影響を与えずにパスを並べ替えるにはどうすればよいですか?

_friends.selectAll('path').sort(function(a, b){ 
    return d3.ascending(a.Q, b.Q); 
}); 

答えて

11

key functionとする必要があります。これにより、配列内のデータムの位置、つまり順序​​(場合によっては変更される可能性があります)を使用するデフォルトに頼るのではなく、任意のキーでデータをバインドできます。

すでに各データに一意のキーを持っていない場合、あなたは常にだけのロード時にそれらを生成することができます

var id = 0; 
for (var i = 0; i < data.length; i++) data[i].id = id++; 

あなたは、新しいデータを作成する場合は、あなたが取得するidをインクリメントし続けることができます新しい一意のID。あなたが行うことができますデータバインディングの後

、:

.data(data, function(d) { return d.id; }) 
+0

ありがとう、ジェイソン、キーの機能は、トリックを行いました。 – Mark

+3

主要な機能について説明している[オブジェクト定数のチュートリアル](http://bost.ocks.org/mike/constancy/)も参照してください。 – mbostock

関連する問題