【问题标题】:Find max value of JSON and store as a variable查找 JSON 的最大值并存储为变量
【发布时间】:2018-10-06 09:24:43
【问题描述】:

我有一个 d3 图,它指定 Y 轴上的范围,如下所示:

  var yScale = d3.scaleLinear()
    .domain([0, 1]) // input 
    .range([height, 0]); // output 

但是 0 到 1 的比例并不是很有用。我希望它找出适合我的范围。我对此有点陌生,所以我想如果我做了这样的事情:

// Data
var dataset = [{
      y: 0.1
    },
    {
      y: 0.6
    },
        {
      y: 0.6
    },
    {
      y: 0.7
    }
  ];

var mymax = Math.max(dataset);

然后我可以在我的数据集中找到最大值,然后将其输入到我的 .domain 范围中,如下所示:

.domain([0, mymax]) // input 

但是,我感谢我的尝试是错误的,因为我返回了 NaN。我认为它可能指向字母 Y 而不是我的数字。

我不觉得这是问题的重复。

【问题讨论】:

  • @GerardoFurtado 只是出于兴趣,为什么 d3.max 在这里不合适?
  • @Jimmy 与Math.max 不同,d3.max 接受一个数组。其实d3.max是这里最好的选择,只是使用访问器来指定属性。
  • 正如他所说,他只是出于兴趣才问的。另外,我已经说过我看错了,我已经重新提出了这个问题。我们可以继续前进吗?
  • @x-ray 再次:我看错了。如果我忽略 S.O.,我会有更多用处。一会儿,我从现在开始。
  • @GerardoFurtado 感谢您的信息:)

标签: javascript json d3.js


【解决方案1】:
var mymax = Math.max.apply(Math, dataset.map(function(o) { return o.y; }));

【讨论】:

  • 这是关于如何在给定数据结构中找到最大值的正确答案。我不知道为什么有人对此表示反对。如果可以使用箭头函数,可以缩短为var mymax = Math.max.apply(Math, dataset.map(o => o.y);
  • 非常感谢
  • 添加解释:Math.max() 需要多个函数参数,因此您需要调用它,例如像这样:Math.max(0.1, 0.6, 0.6, 0.7);。您可以使用Array.map() 将对象数组转换为数字数组,对于给定的示例返回[0.1, 0.6, 0.6, 0.7]
  • 这可以与apply一起使用。
  • 愚蠢的是我必须在这里输入答案,因为有人错误地将其标记为重复。 (之前可能已经问过类似的问题,但绝对不是引用问题的重复。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多