Javascript 从D3中的JSON获取最大值

Javascript 从D3中的JSON获取最大值,javascript,json,scale,d3.js,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(数据)]) 返回的最大值是8,而不是12。我意识到这是因为8大于1/12,但我不确定如

我将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(数据)])

返回的最大值是8,而不是12。我意识到这是因为8大于1/12,但我不确定如何解决这个问题。谢谢

根据API引用,使用自然顺序返回最大值。由于您正在计算字符串数组的最大值,因此使用。比较:

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中而不是字符串中可能更有意义;那么你就不需要任何类型的强制。

谢谢你,迈克。这是一个非常有用的答案。感谢您创建D3-我刚刚开始学习,我很喜欢它。