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

如何在Javascript中动态计算对象数组内所有学生的Q1、Q3与中位数

实现思路

  • 先提取所有学生姓名列表:你的boxplotInput每个元素结构完全一致,直接取第一条数据的key排除Day即可,不需要循环所有行重复获取keys
  • 新增外层循环遍历所有学生姓名,把你原有单学生的计算逻辑套入循环内,每个学生对应生成一套统计结果
  • 用对象存储所有学生的统计结果,方便后续调用取值

完整实现代码

var boxplotInput = [{Day: "01-07-2021", "Thomas": 95, "Diana": 94, "Claura": 93, "Chandler": 93},
    {Day: "02-07-2021", "Thomas": 95, "Diana": 94, "Claura": 94, "Chandler": 94},        
    // 省略中间数据
    {Day: "31-07-2021", "Thomas": 92, "Diana": 94, "Claura": 93, "Chandler": 91}];

// 提取所有学生姓名(仅取第一条数据的key即可)
const studentNames = Object.keys(boxplotInput[0]).slice(1);
// 存储所有学生的统计结果
const allStudentStats = {};

// 外层遍历所有学生,批量计算
for (let i = 0; i < studentNames.length; i++) {
    const currentStudent = studentNames[i];
    // 收集当前学生的所有成绩
    const studentScores = [];
    for (let j = 0; j < boxplotInput.length; j++) {
        studentScores.push(boxplotInput[j][currentStudent]);
    }
    // 排序(沿用你原有逻辑)
    studentScores.sort((a, b) => a - b);
    const length = studentScores.length;
    const midIndex = middleIndex(studentScores, 0, length);
    const medianValue = studentScores[midIndex];
    const Q1 = studentScores[middleIndex(studentScores, 0, midIndex)];
    const Q3 = studentScores[middleIndex(studentScores, midIndex + 1, length)];
    // 存入结果对象
    allStudentStats[currentStudent] = { Q1, median: medianValue, Q3 };
    // 打印当前学生的统计结果
    console.log(`${currentStudent} 统计结果:Q1=${Q1}, 中位数=${medianValue}, Q3=${Q3}`);
}

// 沿用你原有求索引的函数,计算逻辑无需修改
function middleIndex(data, initial, length){
    var n = length - initial + 1;
    n = parseInt((n + 1) / 2);
    return parseInt(n + initial);
}

// 后续可直接通过学生姓名取对应统计值,例如:console.log(allStudentStats.Diana.Q3)

内容的提问来源于stack exchange,提问作者Vadivel A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:42:02