You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:17:17