从D3中获取JSON的最大值

Boo*_*aka 2 javascript json scale d3.js

我正在使用D3和JSON数据,其功能类似于:

 d3.json("http://api.json", function(jsondata) {
 var data = jsondata.map(function(d) { return d.number; });
Run Code Online (Sandbox Code Playgroud)

这导致数据相等 ["2", "5", "8", "12"]

然后,如果我使用: var x = d3.scale.linear() .domain([0, d3.max(data)])

返回的最大值是8而不是12.我意识到这是因为8大于1中的1,但我不知道如何解决这个问题.谢谢!

mbo*_*ock 6

根据API参考,d3.max使用自然顺序返回最大值.由于您计算的是字符串数组的最大值,因此使用了字典(字母)顺序.相比:

console.log("8" > "12"); // true
console.log(8 > 12); // false
Run Code Online (Sandbox Code Playgroud)

如果要计算数组的最大数值,则应该首先将这些字符串转换为数字.一个方便的方法是一元运算+符:

var data = jsondata.map(function(d) { return +d.number; });
Run Code Online (Sandbox Code Playgroud)

如果您愿意,还可以使用parseFloat,parseInt,Number或其他各种方法将字符串强制转换为数字.从技术上讲,你可以在d3.max调用(d3.max(data, Number))中执行此操作,但通常明确地执行强制操作会更快更安全.

当然,既然你已经在使用JSON并且JSON是一种类型化的序列化格式,那么将数字存储在JSON而不是字符串中也更有意义; 那么你就不需要任何类型的强制.