4

D3 を使用して、すべての値が float の配列であるオブジェクトの最大値を見つけるにはどうすればよいですか?

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

たぶん、すべてのキーを反復処理する必要がありますか? それとも、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 に答える