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

PDF员工评估表单JavaScript需求:统计最高频评级

解决方案:员工评估表单评级统计逻辑

核心思路

  • 直接统计每个目标下各评级的出现次数,替代之前的数值赋值加权方案
  • 预设评级优先级规则,处理频率平局场景(多个评级次数相同时,按优先级选最高级的结果)
  • 支持批量处理9个目标,同时实现实时计算(子目标评级变化时自动更新对应Score字段)

实现代码

// 定义评级优先级(从低到高,后项优先级更高,可根据需求调整顺序)
const RATING_PRIORITY = ['Not Applicable', 'Not Met', 'Met', 'Exceeded'];

// 计算单个目标的最终评级
function calculateObjectiveScore(objectiveNum) {
    // 获取当前目标下所有子目标的评级控件(假设子目标控件带有data-objective属性,值为目标编号)
    const subgoalRatings = document.querySelectorAll(`[data-objective="${objectiveNum}"]`);
    // 初始化各评级的计数容器
    const ratingCounts = {
        'Not Applicable': 0,
        'Not Met': 0,
        'Met': 0,
        'Exceeded': 0
    };

    // 遍历子目标,统计每个评级的出现次数
    subgoalRatings.forEach(control => {
        const selectedRating = control.value;
        if (ratingCounts.hasOwnProperty(selectedRating)) {
            ratingCounts[selectedRating]++;
        }
    });

    // 找出出现次数最多的数值
    const maxCount = Math.max(...Object.values(ratingCounts));
    // 收集所有达到最高次数的评级候选
    const topCandidates = Object.keys(ratingCounts).filter(rating => ratingCounts[rating] === maxCount);

    // 处理平局:从候选中挑选优先级最高的评级
    let finalRating = topCandidates[0];
    topCandidates.forEach(candidate => {
        if (RATING_PRIORITY.indexOf(candidate) > RATING_PRIORITY.indexOf(finalRating)) {
            finalRating = candidate;
        }
    });

    // 将结果写入对应Score字段(下拉字段命名为Objective X Rating)
    const scoreField = document.querySelector(`[name="Objective${objectiveNum} Rating"]`);
    if (scoreField) {
        scoreField.value = finalRating;
    }
}

// 批量计算所有9个目标的评级
function calculateAllScores() {
    for (let i = 1; i <= 9; i++) {
        calculateObjectiveScore(i);
    }
}

// 绑定实时计算:当子目标评级变化时,自动更新对应目标的Score
document.querySelectorAll('[data-objective]').forEach(control => {
    control.addEventListener('change', function() {
        const targetObjective = this.dataset.objective;
        calculateObjectiveScore(targetObjective);
    });
});

使用说明

  1. 控件标识调整:如果子目标控件没有data-objective属性,可修改选择器匹配实际命名规则,比如子目标命名为Objective1_Subgoal1,则将document.querySelectorAll([data-objective="${objectiveNum}"])替换为document.querySelectorAll(select[name^="Objective${objectiveNum}_Subgoal"])
  2. 优先级调整:若需提升Not Applicable的权重(比如平局时优先选它),只需修改RATING_PRIORITY数组顺序,将它移至数组末尾即可
  3. 触发时机:可在表单提交时调用calculateAllScores(),或保留change事件监听实现实时更新

内容的提问来源于stack exchange,提问作者Kim Amaral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:15:06