当前位置: 首页 > 知识库问答 >
问题:

JS表达式计算一个月内所有给定数据点的平均值,对于数据点中表示的所有月份

龙成仁
2023-03-14

我正在寻找一个JavaScript表达式来计算一个月内所有给定数据点的平均值,即数据点中表示的所有月份的平均值。到目前为止,我只想为每个月硬编码新数组,并在其中添加12个条件,然后平均每个列表的值。但我觉得肯定有更干净更有效的方法。样本数据=(例如[YYYY,MM,DD,Value]):

[
  [ 2020, 1, 2, 1058 ],
  [ 2020, 1, 8, 1055 ],
  [ 2020, 1, 12, 1058 ],
  [ 2020, 1, 23, 1049 ],
  [ 2020, 1, 24, 1050 ],
  [ 2020, 1, 29, 1057 ],
  [ 2020, 2, 1, 1088 ],
  [ 2020, 2, 5, 1087 ],
  [ 2020, 2, 13, 1101 ],
  [ 2020, 2, 26, 1108 ],
  [ 2020, 4, 25, 1119 ],
  [ 2020, 8, 24, 1178 ],
  [ 2020, 8, 25, 1196 ],
  [ 2020, 9, 29, 1214 ],
  [ 2020, 9, 31, 1230 ],
  [ 2020, 10, 20, 1259 ],
  [ 2020, 11, 18, 1276 ]
]

前三个字段是日期(YYYY、MM、DD)。1-12月表示为0-11,最后一个字段是将被平均的值。

我希望从表达式返回的是一个月平均值数组(例如,{month:average value}):
[{1:avg},{2:avg},{4:avg},{8:avg},{9:avg},{10:avg},{11:avg}]

共有2个答案

汪同
2023-03-14

乔治的解决方案没有错,但这里有另一种方法可以通过大量的评论来实现你想要做的事情。

let source = [
  [ 2020, 1, 2, 1058 ],
  [ 2020, 1, 8, 1055 ],
  [ 2020, 1, 12, 1058 ],
  [ 2020, 1, 23, 1049 ],
  [ 2020, 1, 24, 1050 ],
  [ 2020, 1, 29, 1057 ],
  [ 2020, 2, 1, 1088 ],
  [ 2020, 2, 5, 1087 ],
  [ 2020, 2, 13, 1101 ],
  [ 2020, 2, 26, 1108 ],
  [ 2020, 4, 25, 1119 ],
  [ 2020, 8, 24, 1178 ],
  [ 2020, 8, 25, 1196 ],
  [ 2020, 9, 29, 1214 ],
  [ 2020, 9, 31, 1230 ],
  [ 2020, 10, 20, 1259 ],
  [ 2020, 11, 18, 1276 ]
];

// Object to store our output
let averages = {};

// Loop through the source data
source.forEach(row => {
  // Create an array as this month's value if not set
  if (!averages[row[1]]) 
    averages[row[1]] = [];
  
  // Lump the same-month values into the correct array. Use parseInt to avoid
  // potential NaN errors
  averages[row[1]].push(parseInt(row[3], 10));
});

// Calculate the averages by looping through each key in the object (each month),
// using reduce to get the sum of the array and then use the length property to
// get the average of that array.
Object.keys(averages).forEach(
  (m) => averages[m] = averages[m].reduce((v, i) => v + i, 0) / averages[m].length
);

// TADA!                            
console.log(averages);
富凯风
2023-03-14
let arr = [
  [ 2020, 1, 2, 1058 ],
  [ 2020, 1, 8, 1055 ],
  [ 2020, 1, 12, 1058 ],
  [ 2020, 1, 23, 1049 ],
  [ 2020, 1, 24, 1050 ],
  [ 2020, 1, 29, 1057 ],
  [ 2020, 2, 1, 1088 ],
  [ 2020, 2, 5, 1087 ],
  [ 2020, 2, 13, 1101 ],
  [ 2020, 2, 26, 1108 ],
  [ 2020, 4, 25, 1119 ],
  [ 2020, 8, 24, 1178 ],
  [ 2020, 8, 25, 1196 ],
  [ 2020, 9, 29, 1214 ],
  [ 2020, 9, 31, 1230 ],
  [ 2020, 10, 20, 1259 ],
  [ 2020, 11, 18, 1276 ]
];
let result = [];
let result2 = arr.reduce((res, [year, month, day, value]) => {
  if (!res[month]) {
    res[month] = { month: month, avg: 0, count: 0, sum: 0 };
    result.push(res[month])//remove this if you are satisfied with the result in result2;
  }
  res[month].sum += value;
  res[month].count +=1;
  res[month].avg = res[month].sum/res[month].count;
  return res;
} , {});
console.log('array of objects {[month, sum, count, avg]}', result);
console.log('object with values {month: {month, sum, count, avg}}', result2);
 类似资料:
  • 我想返回一个函数,它给出所有或更多标记的平均值。当我运行代码时,它总是返回一个空列表。 以下是我尝试过的: 请帮我找出代码中的问题,输出应该是。

  • 本文向大家介绍awk 根据表格数据计算列中的平均值,包括了awk 根据表格数据计算列中的平均值的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个;用作列定界符的文件。我们使用以下程序在第二列中计算值的平均值,提供的输入是学生组的成绩列表: 该程序的输出为2.125。 请记住,它NR保存了要处理的行数,END因此在块中它保存了文件中的总行数。 请记住,在许多应用程序(监视,统计)中,中位数是更

  • 我正在尝试提出一个CRON表达式,它允许我在一个月内的每个星期一运行一个石英触发器,第一个除外。 参考文献: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron

  • 问题内容: 嗨,我有一个表测试,其结构如下: 现在,我需要查询该表(测试),以便获得以下输出。 Oracle 11g中的sql查询是否可以实现?11g中的PIVOT功能是否可以实现? 问题答案: 不,它不能用来完成,但是 可以 用来完成: 当不可用时,我通常会像这样取消透视:

  • 问题内容: 我有以下SQL: 这将按照我期望的方式对所有null进行计数。但是,我想使用此sql遍历目录中的每个表,例如在 有人可以提供执行此操作所需的sql吗,我对使用游标一无所知。 谢谢 问题答案: 无需游标。只需将您设置为 然后从此更改您的条款 到 所以整个代码…

  • 我使用的是带有2条线的图表js折线图。我有7个x轴数据点。我只想显示第一个、第二个和最后一个数据点。但我想在工具提示中显示每个数据点。目前,我只在 x 轴标签中列出 1、2 和 7,因此工具提示在 2 上正确显示,但在其他区域当然什么都没有。那么有没有办法不在x轴上显示特定的数据点(但在代码中仍然有用于工具提示的数据)?(另外,这是一个非常简化的例子,说明我正在尝试做什么) 谢谢。