在.json中查找最大值和最小值

时间:2022-02-13 18:55:23

For a graph I'm trying to do with d3.js I need to set up the scales for the axis. The data for the graph is stored in a Json file structured like so:

对于我正在尝试使用d3.js的图表,我需要设置轴的比例。图表的数据存储在如下结构的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
]
}]

and what I'd like to do is to iterate between the various arrays nested to get the years and values minimum and maximum values, but I don't know how to get those values. I managed to get the values of a single array using

我想做的是在嵌套的各种数组之间进行迭代,以获得年份和值的最小值和最大值,但我不知道如何获取这些值。我设法使用了获得单个数组的值

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

where dataset is the identifier of the callback function, but what I'd like to have is to get the minimum and maximum values between all the arrays (like for example min value is in array3 and max in array 1). I guess I should use a for cycle, but I don't know where I should put it and how to set it up to look in all the arrays, so any hints would be really helpful, thanks!

其中dataset是回调函数的标识符,但我想要的是获取所有数组之间的最小值和最大值(例如,min值在array3中,max在数组1中)。我想我应该使用for循环,但我不知道我应该把它放在哪里以及如何设置它以查看所有数组,所以任何提示都会非常有用,谢谢!

2 个解决方案

#1


4  

It's very fun if we use a little functional programming instead of for loops here:

如果我们在这里使用一些函数式编程而不是for循环,那将非常有趣:

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

You can do the same thing with the values.

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

#2


1  

The Math functions min and max are really useful here if you use apply:

如果你使用apply,数学函数min和max在这里真的很有用:

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

小提琴

#1


4  

It's very fun if we use a little functional programming instead of for loops here:

如果我们在这里使用一些函数式编程而不是for循环,那将非常有趣:

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

You can do the same thing with the values.

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

#2


1  

The Math functions min and max are really useful here if you use apply:

如果你使用apply,数学函数min和max在这里真的很有用:

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

小提琴