从D3中的JSON中获取最大值

Getting the max values from JSON in D3

本文关键字:获取 最大值 JSON D3 中的      更新时间:2023-09-26

我将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,但我不知道如何解决这个问题。谢谢

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

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