使用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
对象?或者也许有更好的方式。
答案 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; });
});
});