JavaScript按类型对数组对象的low、mid、high属性分组求和的优化方法
优化实现方案
原有写法存在两个问题:硬编码类型索引不具备扩展性、累加mid字段时错误取了high的值。推荐用Array.prototype.reduce实现通用聚合逻辑,支持任意数量的type类型,写法更简洁易维护:
function aggregateByType(inputArr) { // 用对象做中间聚合容器,key为type值,实现O(1)匹配效率 const aggregateMap = inputArr.reduce((map, item) => { const { type, low, mid, high } = item; // 不存在对应类型则初始化结构 if (!map[type]) { map[type] = { category: type, low: 0, mid: 0, high: 0 }; } // 对应字段累加 map[type].low += low; map[type].mid += mid; map[type].high += high; return map; }, {}); // 将聚合对象转换为目标数组格式 return Object.values(aggregateMap); } // 调用测试 const resultArr = aggregateByType(input); console.log(resultArr);
运行后输出结果为:
[ { category: 'A', low: 1, mid: 2, high: 3 }, { category: 'B', low: 3, mid: 2, high: 0 } ]
如果业务场景固定只有A、B两个类型,不需要兼容其他类型,也可以用更轻量的写法,但上述通用方案适配性更强,后续新增类型无需修改聚合逻辑。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

