如何对对象数组同分类下所有动态生成的series_x键的值进行累加求和
实现方案
核心逻辑是遍历每一条数据的所有键,筛选出以series_开头的字段,按分类逐个累加即可,代码如下:
const objForAllCategories = {}; this.arrOne.forEach(item => { const category = item.category; // 初始化当前分类的累加对象 if (!objForAllCategories[category]) { objForAllCategories[category] = { category }; } // 遍历当前项的所有键,处理series开头的字段 Object.keys(item).forEach(key => { if (key.startsWith('series_')) { // 已存在该字段就累加,不存在就初始化赋值 objForAllCategories[category][key] = (objForAllCategories[category][key] || 0) + item[key]; } }) }) // 转成目标数组格式 this.allCategoriesAndValues = Object.values(objForAllCategories);
代码说明
- 用
Object.keys(item)拿到当前对象的所有字段名,通过startsWith('series_')筛选所有符合规则的统计字段,不需要提前知道具体有多少个series_x,新增字段也能自动适配。如果需要兼容低版本IE,可将该判断替换为key.indexOf('series_') === 0 - 分类下的累加对象初始化时就自带
category属性,最后直接用Object.values就能直接转成目标数组格式,不需要额外遍历组装
运行结果
用你提供的示例数据运行代码,得到的输出和预期完全一致:
allCategoriesAndValues = [ { "category": "Category 1", "series_1": 57, "series_2": 124 }, { "category": "Category 2", "series_1": 11, "series_2": 22 }, { "category": "Category 3", "series_1": 120, "series_2": 127 } ]
内容的提问来源于stack exchange,提问作者One_for_all
相关产品推荐
相关产品推荐

