Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我有一百年来每个月的温度数据。如何计算每年的平均温度?_Javascript_Arrays - Fatal编程技术网

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.