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

如何基于Employee ID分组计算员工得分平均值的JS实现

根据employee_id分组计算员工平均分的实现方案

问题背景

原代码仅将所有员工的得分存入数组,输出为 ["50", "50", "90", "40", "90", "90"]。现需要按employee_id分组,计算每个员工的得分平均值,最终得到如[70,45,90]的结果(分别对应Lem、Ian、Jm的平均分)。

实现思路

  1. 按employee_id对数据分组,记录每个员工的总分和得分次数
  2. 遍历分组结果,用总分除以次数得到平均分
  3. 将所有平均分提取为目标数组

原生JavaScript实现

const test = [
  {"name": "Lem", "employee_id": "2177", "score": "50"},
  {"name": "Ian", "employee_id": "2179", "score": "50"},
  {"name": "Lem", "employee_id": "2177", "score": "90"},
  {"name": "Ian", "employee_id": "2179", "score": "40"},
  {"name": "Jm", "employee_id": "2174", "score": "90"},
  {"name": "Jm", "employee_id": "2174", "score": "90"}
];

// 按employee_id分组,存储总分和得分次数
const groupedData = {};
test.forEach(item => {
  const id = item.employee_id;
  const score = parseInt(item.score, 10); // 转换为数字,避免字符串拼接
  if (!groupedData[id]) {
    groupedData[id] = { total: 0, count: 0 };
  }
  groupedData[id].total += score;
  groupedData[id].count += 1;
});

// 计算平均分并生成目标数组
const average = Object.values(groupedData).map(data => data.total / data.count);

console.log(average); // 输出 [70, 45, 90]

jQuery兼容实现

如果需要沿用原代码的jQuery语法,可使用以下方式:

var test = [
  {"name": "Lem", "employee_id": "2177", "score": "50"},
  {"name": "Ian", "employee_id": "2179", "score": "50"},
  {"name": "Lem", "employee_id": "2177", "score": "90"},
  {"name": "Ian", "employee_id": "2179", "score": "40"},
  {"name": "Jm", "employee_id": "2174", "score": "90"},
  {"name": "Jm", "employee_id": "2174", "score": "90"}
];

var groupedData = {};
$.each(test, function(_, item) {
  var id = item.employee_id;
  var score = parseInt(item.score, 10); // 转换为数字是关键
  if (!groupedData[id]) {
    groupedData[id] = { total: 0, count: 0 };
  }
  groupedData[id].total += score;
  groupedData[id].count += 1;
});

// 提取平均分组成数组
var average = $.map(groupedData, function(data) {
  return data.total / data.count;
});

console.log(average); // 输出 [70, 45, 90]

关键注意点

  • 必须将score的字符串类型转为数字:原数据中score是字符串,直接相加会导致字符串拼接(比如"50"+"90"得到"5090"),使用parseInt()或Number()转换后才能正确计算总分。
  • 分组逻辑依赖employee_id作为唯一标识,确保同一员工的所有记录被归为一组。

内容的提问来源于stack exchange,提问作者Lemuel Fajarda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:33:26