JavaScript如何匹配时间、价格数组计算近30/60天等指定时间段均价
实现思路
- 首先建立时间与价格的一一映射关系,同时将字符串格式的时间转换为可计算的日期类型
- 确定统计基准时间:默认取时间数组中的最新时间,也可根据需求自定义基准时间
- 计算时间阈值:将基准时间往前推你指定的天数(如30天、60天)得到阈值
- 过滤有效数据:同时满足两个条件:1. 时间大于等于时间阈值;2. 价格不等于异常值
-1 - 计算平均值:有效价格总和除以有效数据条数,无有效数据时返回提示避免除以0报错
Python 实现代码
from datetime import datetime, timedelta # 示例数据 time_arr = [ '2021-01-14', '2021-02-08', '2021-02-16', '2021-02-16', '2021-02-17', '2021-02-22', '2021-02-26', '2021-02-28', '2021-04-07', '2021-04-25', '2021-04-26', '2021-05-10', '2021-05-11', '2021-05-13', '2021-05-15', '2021-05-16', '2021-05-24', '2021-06-09', '2021-06-14', '2021-06-14', '2021-06-17', '2021-06-19', '2021-06-20', '2021-07-15', '2021-07-17', '2021-07-17', '2021-07-19', '2021-07-19', '2021-08-02' ] price_arr = [ 79999, 69999, 76641, 76506, 79999, 69999, 64999, 69999, 79999, 72500, 69999, 72500, 77449, 77433, 77684, 79999, 69999, 79999, 69999, -1, 69999, -1, 69999, 74999, 69999, 74999, 69999, 74999, 64999 ] def calc_period_avg(days: int, base_time=None) -> float | str: # 转换时间数组为日期类型 date_list = [datetime.strptime(t, '%Y-%m-%d') for t in time_arr] # 确定基准时间,默认取最新时间 if not base_time: base_time = max(date_list) # 计算时间阈值 threshold = base_time - timedelta(days=days) # 过滤有效数据 valid_prices = [] for date, price in zip(date_list, price_arr): if date >= threshold and price != -1: valid_prices.append(price) # 计算平均值 if not valid_prices: return "当前时间段无有效价格数据" return sum(valid_prices) / len(valid_prices) # 测试示例 if __name__ == '__main__': print("最近30天平均价格:", calc_period_avg(30)) print("最近60天平均价格:", calc_period_avg(60))
示例运行结果
- 最近30天平均价格:70499.0
- 最近60天平均价格:71830.72727272728
内容的提问来源于stack exchange,提问作者Timmy
相关产品推荐
相关产品推荐

