我相信目前没有通过纯粹的 d3 来做到这一点的好方法。从 d3 文档中它指出:
使用自然顺序返回给定数组中的最大值。如果数组为空,则返回 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)?