JS如何对包含日期属性的对象数组按年份聚合,求和对应数值属性
核心实现逻辑
整体分为两步完成:
- 遍历原始数组,提取日期中的年份作为分组标识,累加同一年份的B字段值
- 将分组后的年份和对应总和,转换为指定结构的新数组
JavaScript 实现
const AA = [ {A: '2016-01-01', B: 12}, {A: '2016-02-01', B: 122}, {A: '2017-03-01', B: 162}, // 剩余原始数据 ] // 按年份累加B值 const yearMap = AA.reduce((result, current) => { const year = current.A.slice(0, 4) result[year] = (result[year] || 0) + current.B return result }, {}) // 生成目标格式数组 const newAA = Object.keys(yearMap).map(year => ({ A: `${year}-01-01`, B: yearMap[year] }))
Python 实现
如果确定日期格式固定为YYYY-MM-DD,可以直接用字符串切片提取年份:
AA = [ {"A": "2016-01-01", "B": 12}, {"A": "2016-02-01", "B": 122}, {"A": "2017-03-01", "B": 162}, # 剩余原始数据 ] year_sum = {} for item in AA: year = item["A"][:4] year_sum[year] = year_sum.get(year, 0) + item["B"] newAA = [{"A": f"{year}-01-01", "B": sum_val} for year, sum_val in year_sum.items()]
如果日期格式存在波动,建议用日期解析工具提取年份,更稳妥:
from datetime import datetime AA = [ {"A": "2016-01-01", "B": 12}, {"A": "2016-02-01", "B": 122}, # 剩余原始数据 ] year_sum = {} for item in AA: # 按实际日期格式调整strptime的第二个参数 date = datetime.strptime(item["A"], "%Y-%m-%d") year = str(date.year) year_sum[year] = year_sum.get(year, 0) + item["B"] newAA = [{"A": f"{year}-01-01", "B": sum_val} for year, sum_val in year_sum.items()]
内容的提问来源于stack exchange,提问作者geo
相关产品推荐
相关产品推荐

