使用D3.max函数从json文件获取最大值

时间:2014-04-28 15:54:10

标签: javascript json d3.js

{
  "data" : {
        "years" : {
            "YR1998" : {
                 "week" : {
                      "W1" : {   "mean": { 7.8 } },
                      "W2" : { "mean" : { 6.1 } },
                 }
           },
           "YR1999" : {
                 "week" : {
                      "W1" : { "mean" : { 5.1 } },
                      "W2" : { "mean" : { 8.1 } },
                 }
           }
        }
  }
}

我上面有以下json文件,我希望使用d3.max函数找到max“mean”,但似乎无法在y轴上得到结果。我正在使用的代码如下,

var dataset;
d3.json("ili.json", function(error, data) {
     dataset = data;
};

var y = d3.scale.linear().domain([0, d3.max(dataset, function(d) { 
             return d3.max(d.years, function(e) {
                return d3.max(e.week, function(f) {
                   return d3.max(f.week, function(g) {
                     return g.mean;
                   }
                }
             }
       }]).range([height, 0]);

1 个答案:

答案 0 :(得分:1)

d3.max()的第一个参数必须是数组;它不适用于键值对象。由于您传入的对象不具有有效的length属性,因此d3.max将它们视为空数组,并返回未定义的值。

您可以使用d3.values从键值对象中创建数组。对于嵌套数据结构,您必须将它应用于嵌套max函数的每一步:

var y=d3.scale.linear().domain([0, 
        d3.max(d3.values(dataset), function(d) { 
         return d3.max(d3.values(d.years), function(e) {
            return d3.max(d3.values(e.week), function(f) {
               return d3.max(d3.values(f.week), function(g) {
                 return g.mean;
               }
            }
         }
   }]).range([height, 0]);