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

如何对给定学生分数数组过滤并按500的百分比分段创建新对象

按分数区间过滤学生数组并分组到对应对象

没问题,我来一步步帮你实现这个需求。首先得明确每个分数区间的具体数值,再用数组过滤方法把学生分到对应的对象里。

第一步:明确各区间的分数范围

以500为基准分,各区间的计算方式如下:

  • 对象A:500的±10% → 分数范围是 500×0.9 = 450 到 500×1.1 = 550(包含边界值)
  • 对象B:500的±20% → 分数范围是 500×0.8 = 400 到 500×1.2 = 600
  • 对象C:500的±30% → 分数范围是 500×0.7 = 350 到 500×1.3 = 650
  • 对象D:500的±40% → 分数范围是 500×0.6 = 300 到 500×1.4 = 700

第二步:代码实现(JavaScript)

首先得修正你给出的数组语法(JS里数组元素要用方括号包裹,同时修正变量名拼写studends→students),然后用filter方法完成分组:

// 修正后的学生数组
const students = [
  ["Marc", 404],
  ["Paul", 450],
  ["Steve", 490],
  ["Jar", 500],
  ["Niels", 520],
  ["Marco", 540],
  ["Sacha", 560],
  ["Mike", 500],
  ["Ted", 520],
  ["Ammar", 540],
  ["Rolph", 560],
  ["Brian", 590],
  ["Jeff", 600],
  ["John", 650],
  ["Mickael", 890]
];

// 定义基准分和各区间的上下限(用比例计算更灵活)
const baseScore = 500;
const scoreRanges = {
  A: { min: baseScore * 0.9, max: baseScore * 1.1 },
  B: { min: baseScore * 0.8, max: baseScore * 1.2 },
  C: { min: baseScore * 0.7, max: baseScore * 1.3 },
  D: { min: baseScore * 0.6, max: baseScore * 1.4 }
};

// 生成分组后的对象
const groupedStudents = {
  A: students.filter(([name, score]) => score >= scoreRanges.A.min && score <= scoreRanges.A.max),
  B: students.filter(([name, score]) => score >= scoreRanges.B.min && score <= scoreRanges.B.max),
  C: students.filter(([name, score]) => score >= scoreRanges.C.min && score <= scoreRanges.C.max),
  D: students.filter(([name, score]) => score >= scoreRanges.D.min && score <= scoreRanges.D.max)
};

// 查看分组结果
console.log(groupedStudents);

关键说明

  1. 语法修正:你原数组里的("Marc", 404)是错误的JS语法,改成["Marc", 404]才能正确表示每个学生的姓名和分数。
  2. 灵活的区间计算:用比例而非固定数值计算区间,后续如果要调整基准分或比例,只需修改baseScore或比例值即可,不用逐个修改区间数值。
  3. 默认包含逻辑:当前代码中,符合多个区间的学生会同时出现在多个对象里(比如Jar的500分同时属于A、B、C、D)。如果需要互斥分组(一个学生只属于优先级最高的区间,比如A优先于B),可以调整逻辑:先过滤出A组,再从剩余学生中过滤B组,以此类推,示例如下:
// 互斥分组的实现
let remainingStudents = [...students];
const exclusiveGroups = {};

// 先取A组
exclusiveGroups.A = remainingStudents.filter(([_, score]) => score >= scoreRanges.A.min && score <= scoreRanges.A.max);
// 从剩余学生中移除A组的学生
remainingStudents = remainingStudents.filter(student => !exclusiveGroups.A.includes(student));

// 再取B组
exclusiveGroups.B = remainingStudents.filter(([_, score]) => score >= scoreRanges.B.min && score <= scoreRanges.B.max);
remainingStudents = remainingStudents.filter(student => !exclusiveGroups.B.includes(student));

// 同理处理C和D组
exclusiveGroups.C = remainingStudents.filter(([_, score]) => score >= scoreRanges.C.min && score <= scoreRanges.C.max);
remainingStudents = remainingStudents.filter(student => !exclusiveGroups.C.includes(student));

exclusiveGroups.D = remainingStudents.filter(([_, score]) => score >= scoreRanges.D.min && score <= scoreRanges.D.max);

这样处理后,每个学生只会出现在一个分组里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:05