在键是数组的对象中找到最大值?

时间:2013-09-19 21:36:54

标签: d3.js

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

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

我读过Mike's answer on finding the max of a nested array,但我不知道该怎么做,因为这是数组的对象。

目前我正在这样做,这太可怕了:

  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对象?或者也许有更好的方式。

1 个答案:

答案 0 :(得分: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; });
  });
});