如何在JavaScript数组中按分组计算均值?(AngularJS场景)
按
fct分组计算value的均值 给定数组:
var arr = [{"object":"Anguille","fct":"Type A","value":"2"},{"object":"Athérine","fct":"Type A","value":"1.0031643586595139"}, {"object":"Epinoche","fct":"Type B","value":"1"}, {"object":"Mulet","fct":"Type B","value":"5"}];
需要按fct字段分组,计算每组value的均值,期望输出:
{ 'Type A': 1.5, 'Type B': 3 }
你的现有代码仅能计算分组总和,要实现均值计算,需要同时跟踪每组的总和和元素数量,这里用arr.reduce可以高效完成:
解决方案代码
// 第一步:用reduce分组,记录每组的总和与元素数量 const groupedData = arr.reduce((acc, item) => { const value = parseFloat(item.value); // 转为浮点数,避免小数精度丢失 const groupKey = item.fct; if (!acc[groupKey]) { // 首次遇到该分组,初始化总和和计数 acc[groupKey] = { total: value, count: 1 }; } else { // 已有分组,累加总和与计数 acc[groupKey].total += value; acc[groupKey].count += 1; } return acc; }, {}); // 第二步:计算每组的均值,按需处理精度 const meanResult = {}; for (const key in groupedData) { // 示例中Type A的均值取了近似值,这里用四舍五入保留一位小数 meanResult[key] = Math.round((groupedData[key].total / groupedData[key].count) * 10) / 10; // 若需要精确值,直接替换为:meanResult[key] = groupedData[key].total / groupedData[key].count; } console.log(meanResult);
关键说明
- 替换
parseInt为parseFloat:你的数据包含小数,parseInt会截断小数部分导致计算错误; - 用
reduce累积两个关键值:每组的总和(total)和元素个数(count),这是计算均值的必要条件; - 精度处理:如果需要和示例完全一致的近似结果,用
Math.round做小数位数控制;若要保留精确均值,直接执行除法即可。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

