【问题标题】:Getting the max values from JSON in D3在 D3 中从 JSON 获取最大值
【发布时间】:2012-08-03 22:55:31
【问题描述】:

我正在将 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 大于 12 中的 1,但我不知道如何解决这个问题。谢谢!

【问题讨论】:

    标签: javascript json scale d3.js


    【解决方案1】:

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

    【讨论】:

    • 谢谢迈克。这是一个非常有帮助的答案。感谢您创建 D3 - 我刚开始学习它,我很喜欢它。
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2013-12-04
    • 2011-02-06
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多