D3.js 在键为数组的对象中查找最大值?

D3.js 在键为数组的对象中查找最大值?,d3.js,D3.js,使用D3,如何在所有值都是浮点数组的对象中找到最大值 var data = { "point1": { "level1": [...], "level2": [...] }, ... }; 我读了,但我不确定在这里做什么,因为这是数组的对象 目前我正在做这件事,这很糟糕: var c1Max = d3.max(data.point1.level1, function(d) { return d.value; }); var

使用D3,如何在所有值都是浮点数组的对象中找到最大值

  var data = {
    "point1": { 
       "level1": [...],
       "level2": [...]
    },
    ...
  };
我读了,但我不确定在这里做什么,因为这是数组的对象

目前我正在做这件事,这很糟糕:

  var c1Max = d3.max(data.point1.level1, function(d) { return d.value; });
  var c2Max = d3.max(data.point1.level2, function(d) { return d.value; });
  var c3Max = d3.max(data.point2.level1, function(d) { return d.value; });
  var c4Max = d3.max(data.point2.level2, function(d) { return d.value; });
  var c5Max = d3.max(data.point3.level1, function(d) { return d.value; });
  var c6Max = d3.max(data.point3.level2, function(d) { return d.value; });
  var max = d3.max([c1Max, c2Max, c3Max, c4Max, c5Max, c6Max]);
也许我应该迭代所有的键?或者我可以用某种方式将
数据
对象展平?或者有更好的方法

您可以使用将对象转换为可以迭代的对象:

var max = d3.max(d3.entries(data), function(d) {
    return d3.max(d3.entries(d.value), function(e) {
        return d3.max(e.value);
    });
});
在这种特殊情况下(不需要键),您当然也可以使用,这使得上面的代码略短一些

要使其与JSFIDLE中的结构一起工作,您需要以下代码:

var max1 = d3.max(d3.entries(data), function(d) {
  return d3.max(d3.entries(d.value), function(e) {
      return d3.max(e.value, function(f) { return f.value; });
  });
});

该编辑返回一个对象。。。如果有用的话,这里有一个JSFIDLE:好的,这与您在问题中描述的结构略有不同。再次编辑。