Javascript 我有一百年来每个月的温度数据。如何计算每年的平均温度?
我知道这是个问题,很抱歉。但我有以下格式的数据列表:Javascript 我有一百年来每个月的温度数据。如何计算每年的平均温度?,javascript,arrays,Javascript,Arrays,我知道这是个问题,很抱歉。但我有以下格式的数据列表: { "Year": 1881, "Jan": -8, "Feb": -13, "Mar": 2, "Apr": -2, "May": -3, "Jun": -27, "Jul": -5, "Aug": -1, "Sep": -8, "Oct": -18, "Nov": -25, "Dec": -14, "J-D": -10,
{
"Year": 1881,
"Jan": -8,
"Feb": -13,
"Mar": 2,
"Apr": -2,
"May": -3,
"Jun": -27,
"Jul": -5,
"Aug": -1,
"Sep": -8,
"Oct": -18,
"Nov": -25,
"Dec": -14,
"J-D": -10,
"D-N": -11,
"DJF": -13,
"MAM": -1,
"JJA": -11,
"SON": -17
},
{
"Year": 1882,
"Jan": 10,
"Feb": 10,
"Mar": 2,
"Apr": -19,
"May": -17,
"Jun": -24,
"Jul": -9,
"Aug": 5,
"Sep": 0,
"Oct": -21,
"Nov": -20,
"Dec": -24,
"J-D": -9,
"D-N": -8,
"DJF": 2,
"MAM": -11,
"JJA": -9,
"SON": -14
},
等等
我想计算每年的平均气温。有一百多年的历史。最简单的方法是什么?将它们放入数组中,然后手动计算它们将花费太长时间。即使这样,我也不知道如何分配每年的平均温度。我可以用什么方法写这段代码?我正在使用Javascript。我建议编写一个python脚本,将字符串解析到多维字典中。dict的第一层应为表示年份的键,数值应保存在第二层字典中,其中键为一年中的月份,数值为相关温度。从那里,您可以编写一个函数来迭代dict,并按照Jaromanda的建议计算平均值
我会给你写出来,但这是一个很好的学习项目。查找python多维字典以及如何解析字符串。我建议编写一个python脚本,将字符串解析到多维字典中。dict的第一层应为表示年份的键,数值应保存在第二层字典中,其中键为一年中的月份,数值为相关温度。从那里,您可以编写一个函数来迭代dict,并按照Jaromanda的建议计算平均值
我会给你写出来,但这是一个很好的学习项目。查找python多维字典以及如何解析字符串。首先,您需要一个键数组来表示月份(因此可以忽略所有其他数据) 然后,假设您的数据在一个实际数组中,您可以使用一个(两个reduce操作)生成一个年到平均值的映射 例如,3,3,3,3,3,4,3,3,3,3,3,3,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,“DJF”:2,“MAM”:-11,“JJA”:-9,“SON”:-14}]; 设月份=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月']; 让平均数=年。减少((平均数,年)=>{ 求和=月。减少((平均值,月)=>平均值+年[月],0); 平均值[年]=总和/月数长度; 返回平均值; }, {});
document.write(“”+JSON.stringify(averages,null,”)+“”);首先,您需要一个键数组来表示月份(因此可以忽略所有其他数据) 然后,假设您的数据在一个实际数组中,您可以使用一个(两个reduce操作)生成一个年到平均值的映射 例如,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3DJF“:2,“MAM”:-11,“JJA”:-9,“SON”:-14}]; 设月份=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月']; 让平均数=年。减少((平均数,年)=>{ 求和=月。减少((平均值,月)=>平均值+年[月],0); 平均值[年]=总和/月数长度; 返回平均值; }, {});
document.write(''+JSON.stringify(averages,null,'')+'');这里有一个使用现代数组方法的答案,通过将问题分解成步骤,使解决方案更易于阅读
有很多方法可以解决这个问题,但这不是唯一的解决方案。每种方法的共同点是,以某种方式,您需要迭代数组(通过
map
和reduce
在此处完成),按您的方式存储总和(此处通过reduce
隐式处理),然后除以月数。这是一个使用现代数组方法的答案,通过将问题分解成步骤,使解决方案更易于阅读
有很多方法可以解决这个问题,但这不是唯一的解决方案。每种方法的共同点是,以某种方式,您需要迭代数组(通过map
和reduce
在此处完成),按您的方式存储总和(此处通过reduce
隐式处理),然后除以月数。或者
var temps=[
{“年份”:1881年,1月8日,2月13日,3月2日,4月2日,5月3日,6月27日,7月5日,8月1日,9月8日,10月18日,11月25日,12月14日,J-D:10,D-N:11,DJF:13,MAM:1,JJA:11,SON:17},
{“年”:1882,“一月”:10,“二月”:10,“三月”:2,“四月”:-19,“五月”:-17,“六月”:-24”,“七月”:-9,“八月”:5,“九月”:0,“十月”:-21,“十一月”:-20,“十二月”:-24,“J-D”:-9,“D-N”:-8,“DJF”:2,“妈妈”:-11,“JJA”:-9,“儿子”:-14}
],
总数=0;
对于(变量i=0,lng=temps.length;i
或者
var temps=[
{“年份”:1881年,1月8日,2月13日,3月2日,4月2日,5月3日,6月27日,7月5日,8月1日,9月8日,10月18日,11月25日,12月14日,J-D:10,D-N:11,DJF:13,MAM:1,JJA:11,SON:17},
{“年”:1882年,1月10日,2月10日,3月2日,4月19日,5月17日,6月24日,7月9日,
let months = ['Jan', 'Feb', 'Mar', ...];
// The data you provided
var data = [
{
"Year": 1881,
"Jan": -8,
"Feb": -13,
"Mar": 2,
"Apr": -2,
"May": -3,
"Jun": -27,
"Jul": -5,
"Aug": -1,
"Sep": -8,
"Oct": -18,
"Nov": -25,
"Dec": -14,
"J-D": -10,
"D-N": -11,
"DJF": -13,
"MAM": -1,
"JJA": -11,
"SON": -17
},
{
"Year": 1882,
"Jan": 10,
"Feb": 10,
"Mar": 2,
"Apr": -19,
"May": -17,
"Jun": -24,
"Jul": -9,
"Aug": 5,
"Sep": 0,
"Oct": -21,
"Nov": -20,
"Dec": -24,
"J-D": -9,
"D-N": -8,
"DJF": 2,
"MAM": -11,
"JJA": -9,
"SON": -14
},
];
// Hardcode which keys count towards the average, ignore the rest like "Year"
// and "J-D".
var months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
var result = data.map(yearData => ({ // Set `result` to `data` with each
// item replaced with an object with...
Year: yearData.Year, // The `Year` property copied
average: (months // An `average` property set to the
// result of taking `months` and...
.map(month => yearData[month]) // Replacing each item with the value
// at that key in the current year data
.reduce((a, b) => a + b) // Then taking the sum of the Array
/ months.length // Then going from sum to average by
// dividing by the number of items
),
}));
// `result` now contains the averages.