現在、純粋に d3 でこれを行う良い方法はないと思います。d3 docs から、次のように述べています。
自然順序を使用して、指定された配列の最大値を返します。配列が空の場合、undefined を返します。オプションのアクセサー関数を指定できます。これは、最大値を計算する前に array.map(accessor) を呼び出すことと同じです。
ソースコードを調べて、d3.max の計算方法を確認しました。
d3.max = function(array, f) {
var i = -1, n = array.length, a, b;
if (arguments.length === 1) {
while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
while (++i < n) if ((b = array[i]) != null && b > a) a = b;
} else {
while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
}
return a;
}
これは、アクセサー関数が値自体を返すという事実によるものです。おそらくオブジェクトを返すようにカスタマイズできますが、d3.max は特に数値を処理します。
他の人が述べているように、純粋な Javascript でこれを処理する方法は他にもあります。
関連する質問:
ドメインが D3 で d3.max(data) を使用しないのはなぜですか?