2013-11-01 93 views
3

对于我想用d3.js做的图,我需要设置轴的比例。 为图中的数据存储在结构像这样一个JSON文件:在.json中查找最大值和最小值

[{ 
    "id" : "AustraliaNewZealand" , 
    "year" : [1990,1992,1994,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010], 
    "value":[477790,485825,487296,488885,502585,511718,526594,538967,550556,563572,577171,579126,591635,599216,604267,608954,615853,623685,618961,614920] 
}, 
{ 
    "id":"CentralEurope", 
    "year":[1990,1992,1994,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010], 
    "value":[1548736,1334452,1313088,1283248,1314709,1360546,1343907,1285511,1237278,1251872,1244069,1233778,1284639,1297510,1317861,1359787,1396681,1361445,1278731,1343044] 
}, 
{ 
    "id":"EasternEurope", 
    "year":[1990,1992,1994,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010], 
    "value":[4418516,3530464,3287987,2925644,2775181,2672238,2540975,2495036,2513372,2515375,2540796,2544848,2598148,2637682,2622241,2709974,2714204,2740248,2565213,2680226] 
}, 
{ 
    "id":"NorthAmerica", 
    "year":[1990,1992,1994,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010], 
    "value":[6750754,6821412,6948829,7059001,7166869,7386971,7460485,7509719,7573562,7790060,7675762,7710685,7769154,7896824,7918461,7841686,7966277,7751508,7277713,7493948] 
}, 
{ 
    "id":"WesternEurope", 
    "year":[1990,1992,1994,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010], 
    "value":[4365949,4290345,4222425,4221029,4264725,4353056,4290057,4310736,4251628,4260565,4306230,4278128,4333237,4337031,4305560,4267515,4209481,4125479,3841580,3924831 
] 
}] 

什么,我想要做的是不同的阵列之间进行迭代嵌套拿到年和值的最小值和最大值,但我不知道如何获得这些价值。我设法用得到一个数组的值

var xScale = d3 .time.scale() 
       .domain((d3.extent(dataset[0].year))) 
       .range([margin*2, (width - margin)]); 
var yScale = d3 .scale.linear() 
       .domain([0, d3.max(dataset[0].value)]) 
       .range([(height - margin), margin]); 

其中数据集是回调函数的标识,但我想已经是把所有的阵列之间的最小值和最大值(例如,最小值在array3中,最大值在数组1中)。我想我应该使用作为的周期,但我不知道应该放在哪里以及如何设置它以查看所有阵列,所以任何提示都会非常有帮助,谢谢!

回答

4

这是非常有趣的,如果我们用一个小功能编程,而不是for循环这里:

d3.extent(dataset.reduce(function(a,b) { return a.concat(b.year) }, [])) 

你可以用值做同样的事情。

1

的数学函数minmax在这里真正有用的,如果你使用apply

function getMinMax(array, type) { 
    var out = []; 
    array.forEach(function(el) { return out.push.apply(out, el[type]); }, []); 
    return { min: Math.min.apply(null, out), max: Math.max.apply(null, out) }; 
} 

console.log(getMinMax(array, 'year')); // { min=1990, max=2010 } 
console.log(getMinMax(array, 'value')); // { min=477790, max=7966277} 

Fiddle

+0

谢谢,这个工程,但返回每个数组的最小值和最大值,也许我不清楚在我的问题,但我试图获得数组的最小值和最大值,我会尽量做到这一点 – tomtomtom

+0

已更新的答案。 – Andy

+0

感谢您更新答案!我只是因为速度更快而被标记为正确的那个(而且他的方法不涉及任何我不知道的循环),但是感谢更新:) – tomtomtom

相关问题