d3.js中的d3.max()和math.max()有何不同?

3
我正在尝试理解来自http://bl.ocks.org/d3noob/e34791a32a54e015f57d的代码。
我不理解代码尝试缩放数据的部分:
// Scale the range of the data

x.domain(d3.extent(data, function(d) { return d.date; }));

y0.domain([0, d3.max(data, function(d) {
                                         return Math.max(d.close); })]); 
y1.domain([0, d3.max(data, function(d) { 
                                         return Math.max(d.open); })]);

为什么我们需要在返回语句中同时使用d3.max和Math.max?

使用d3.max(data, function(d) { return d.close ;} )就可以得到数据的最大值了,为什么还需要再用一次Math.max呢?


你是对的,在这里不需要额外的 Math.max - Lars Kotthoff
是的,这里有一个 plunk 来证明它(已删除 Math.max):http://plnkr.co/edit/FcdzJJ?p=preview - Henry S
阅读文档-https://github.com/mbostock/d3/wiki/Arrays#d3_max - Dom
1个回答

5
以下是d3.max和Math.max之间的区别:
  1. d3.max()与Math.max()不同,它使用自然顺序进行元素比较,而不是数值顺序,即["120","3"]的最大值为"3",而[120,3]的最大值为120。

  2. d3.max()忽略传递给数组中的未定义值(这对于仅考虑数据的已定义区域而计算比例尺的域非常有用)。

  3. 如果需要Max值的数组为空,则d3.max()返回undefined,而Math.max()返回-Infinity。

希望这些要点能帮助您理解d3.max()和Math.max()之间的区别。

5
最重要的区别是 Math.max() 接受两个非数组参数并返回它们中的最大值,而 d3.max() 接受一个数组参数并返回其中的最大值。 - Lars Kotthoff
2
Math.max() takes two or more non-array arguments. You can do Math.max(3, 7, 8, 11) = 11 or even Math.max(....arrayOfNValues) - Charlie Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接