4

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

  var data = {
    "point1": { 
       "level1": [...],
       "level2": [...]
    },
    ...
  };

我阅读了 Mike 的关于找到嵌套数组的最大值的答案,但我不确定在这里该怎么做,因为这是数组的对象。

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

  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]);

也许我应该遍历所有键?或者也许我可以以某种方式压平data物体?或者也许有更好的方法。

4

1 回答 1

4

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

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

在这种特殊情况下(不需要键),您当然也可以使用d3.values,这使得上面的代码更短一些。

要使其与 jsfiddle 中的结构一起使用,您需要以下代码:

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; });
  });
});
于 2013-09-19T21:45:15.793 回答