d3のドキュメントから、d3.ascending
次のようになります
function(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
a
あなたの場合は何b
ですか?代わりに、次のように並べ替えて確認できます。
tr.sort(function(a,b){ console.log('compare', a, b); });
私はそれを推測していてa
、b
オブジェクトです。その場合、それらをより大きい/より小さい-thanでソートしても意味がありません。
編集:
クリックされた列のキーで並べ替えるにはk
、クリックハンドラーから取得した属性を使用する必要があります(これを確認する方法はありませんが、それが何でk
あるかはかなり確信しています–文字列に対応する列/属性名)。
したがって、d3.ascendingの使用をやめ、次のように並べ替えを行います。
tr.sort(function(a, b) {
return a[k] < b[k] ? -1 : a[k] > b[k] ? 1 : 0;
})
または、次のようにd3.ascendingを使用することもできます。
tr.sort(function(a, b) {
return d3.ascending(a[k], b[k]);
})
原則として大した違いはありません。ただし、後者の利点の1つは、ユーザーが並べ替えの方向(昇順と降順)を制御できるようにするものを簡単に実装できることです。このようなもの:
var sortFunction = d3.ascending;
// Instead of the line above, you could write some logic
// to decide whether sortFunction is d3.ascending or d3.descending
// Then you can write:
tr.sort(function(a, b) {
return sortFunction(a[k], b[k]);
})