州ごとの年間GDP、収入、人口などの値を含むネストされたオブジェクトの配列があります。
// The "records" array looks like this:
[
{
name : "...",
income : [
[1995, 1234], // [year, value]
[1996. 1235],
[...]
],
GDP : [
[1995, 1234],
[1996. 1235],
[...]
],
population : [
[1995, 1234],
[1996. 1235],
[...]
]
}, {
name : "...",
income : [
[...]
],
GDP : [
[...]
],
population : [
[...]
]
}, {
...
}
]
ここで、すべての州と年にわたる各次元の最小値と最大値(範囲)を見つけたいと思います。
populationExtents = [659651, 82536680];
gdpExtents = [14250, 2498800];
incomeExtents = [..., ...];
配列全体を複数回トラバースすることなく、これを行うにはどうすればよいですか?現在、私は各次元に対してこれを行っています:
var income = records.map(function(d, i) {
return d.income;
});
var min = d3.min(income, function(d, i) {
return d3.min(d, function(e) {
return e[1]; // returns values of each year
});
});
var max = d3.max(income, function(d, i) {
return d3.max(d, function(e) {
return e[1];
});
});
しかし、これは非常に複雑すぎると思います。次元と状態ごとにすべての「ローカル」最小値を計算してから、(次元ごとに1つのパスではなく)パスですべての状態のグローバル最小値を計算できるはずだからです。
いくつかのレベルのd3.mapとネストされたd3.minを試しましたが、この構造に頭を包むことができません。