从D3中获取JSON的最大值

时间:2012-08-03 22:55:31

标签: javascript json scale d3.js

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

根据API参考,d3.max使用自然顺序返回最大值。由于您计算字符串数组的最大值,因此使用lexicographic (alphabetical) order。比较:

console.log("8" > "12"); // true
console.log(8 > 12); // false

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

var data = jsondata.map(function(d) { return +d.number; });

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

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