我有一个包含像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];
});
});
但我认为这是太复杂,因为我应该能够计算出每个维度和国家所有的“本地”最小值,然后计算全局最小值超过所有状态,而不是每个维度一次传球。
我尝试了几个级别的d3.map和嵌套的d3.min,但是我无法把头围绕在这个结构上。
对不起,如果这有点不清楚:'[199x,1234]'是指'[year,value]'。您的代码包含计算的最小/最大值中的年份。我编辑张贴澄清这一点。 –
太棒了,这个工程。谢谢!然而,IIUC它需要每个道具上的呼叫(因此每个道具需要一个地图和一个过滤器)。我想没有(合理)的方法来做到这一点只有一个地图/过滤器? –
嘿dev-null ...在漂亮的版本。而不是'arr = arr.concat.apply(arr,value [prop] [1]);',为什么不只是'arr = arr.concat(value [prop] [1]);'? – AndyPerlitch