javaScript蓝桥杯---分阵营,比高低

news2024/11/23 1:01:39

目录

  • 一、介绍
  • 二、准备
  • 三、目标
  • 四、代码
  • 五、答案


一、介绍

期末考试结束不久,辛勤的园丁们就将所有学生的考试成绩汇总完毕。不过现在遇到一个问题,那就是目前所有学生的考试数据均混杂在一起。这些数据结构如下:

[
  {
    name: "潇然",
    class: 2, // 班级
    math: 110, // 数学成绩
    language: 92, // 语文成绩
    english: 114, // 英语成绩
    physics: 56, // 物理成绩
    chemistry: 74, // 化学成绩
  },
  {
    name: "张三",
    class: 1,
    math: 100,
    language: 80,
    english: 60,
    physics: 80,
    chemistry: 60,
  },
  // ...
];

从上面的数据结构来看,老师们很难从中分辨出自己班级的学生,更不用说班级学生的成绩排名了。因此我们需要封装一个用于处理这些数据对工具函数,以便帮助老师们更好的查看自己班级的学生成绩。

二、准备

本题已经内置了初始代码,打开实验环境,目录结构如下:

├── index.html
└── student-grade.js

其中:

  • index.html 是主页面。
  • student-grade.js 是待补充的 js 文件。

三、目标

补充文件 student-grade.js 中的 orderStudentGrade 工具函数,访问 index.html 页面会按照不同的班级,且班级内降序排列所有学生的成绩。最终效果如下:

在这里插入图片描述
具体功能说明:

  • 接收所有学生成绩的数组。
  • 将学生按不同的班级分组,且班级内按照总分降序排列(如果学生 A、B 的总分相同,则按照学生在原数据中的先后顺序进行排列,不要在学生成绩的数据对象中添加多余的字段,确保排序后的对象和排序前一致)。
  • 返回分班排序后的对象(如果传入的学生成绩列表为空,则返回一个空对象),形如:
// 返回的结果对象:
// key 是班级号,同一个班级中学生成绩降序排列
{
  1: [
    {
      name: "潇然",
      class: 1,
      math: 110,
      language: 92,
      english: 114,
      physics: 56,
      chemistry: 74,
    },
    {
      name: "张三",
      class: 1,
      math: 10,
      language: 8,
      english: 60,
      physics: 8,
      chemistry: 60,
    },
    // ...
  ],
  2: [
    // ...
  ],
};

四、代码

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>考试成绩排序</title>
  </head>
  <style>

    #output-container {
      width: 600px;
      margin: 0 auto;
    }

    .cls {
      display: flex;
      flex-direction: column;
    }

    .cls + .cls {
      margin-top: 30px;
    }

    .cls-header {
      font-size: 30px;
    }

    td {
      text-align: center;
    }
  </style>
  <body>
    <div id="output-container"></div>
    <script>
      module = {};
    </script>
    <script
      type="text/javascript"
      src="./student-grade.js
    "
    ></script>
    <script>
      const orderStudentGradeFn = module.exports;
      const output = document.getElementById("output-container");
      const students = [
        {
          name: "张三",
          class: 1,
          math: 100,
          language: 80,
          english: 60,
          physics: 80,
          chemistry: 60,
        },
        {
          name: "李四",
          class: 1,
          math: 120,
          language: 60,
          english: 20,
          physics: 100,
          chemistry: 100,
        },
        {
          name: "王五",
          class: 1,
          math: 140,
          language: 90,
          english: 120,
          physics: 60,
          chemistry: 60,
        },

        {
          name: "苑博",
          class: 2,
          math: 140,
          language: 90,
          english: 120,
          physics: 60,
          chemistry: 60,
        },

        {
          name: "文轩",
          class: 2,
          math: 110,
          language: 60,
          english: 120,
          physics: 30,
          chemistry: 30,
        },

        {
          name: "聪健",
          class: 3,
          math: 110,
          language: 60,
          english: 120,
          physics: 30,
          chemistry: 30,
        },
        {
          name: "烨磊",
          class: 3,
          math: 88,
          language: 70,
          english: 100,
          physics: 45,
          chemistry: 56,
        },
        {
          name: "烨霖",
          class: 3,
          math: 120,
          language: 60,
          english: 100,
          physics: 50,
          chemistry: 60,
        },
        {
          name: "荣轩",
          class: 2,
          math: 90,
          language: 160,
          english: 120,
          physics: 50,
          chemistry: 50,
        },
        {
          name: "懿轩",
          class: 2,
          math: 100,
          language: 90,
          english: 120,
          physics: 90,
          chemistry: 90,
        },
        {
          name: "擎苍",
          class: 2,
          math: 100,
          language: 130,
          english: 120,
          physics: 10,
          chemistry: 40,
        },
        {
          name: "绍齐",
          class: 1,
          math: 100,
          language: 90,
          english: 120,
          physics: 60,
          chemistry: 60,
        },
        {
          name: "皓轩",
          class: 1,
          math: 100,
          language: 120,
          english: 120,
          physics: 50,
          chemistry: 50,
        },
        {
          name: "鹭洋",
          class: 1,
          math: 100,
          language: 80,
          english: 120,
          physics: 30,
          chemistry: 90,
        },
        {
          name: "潇然",
          class: 2,
          math: 110,
          language: 92,
          english: 114,
          physics: 56,
          chemistry: 74,
        },
        {
          name: "智宸",
          class: 1,
          math: 100,
          language: 100,
          english: 100,
          physics: 30,
          chemistry: 30,
        },
        {
          name: "风华",
          class: 1,
          math: 110,
          language: 60,
          english: 120,
          physics: 80,
          chemistry: 79,
        },
        {
          name: "雨泽",
          class: 1,
          math: 100,
          language: 68,
          english: 115,
          physics: 36,
          chemistry: 83,
        },
        {
          name: "浩然",
          class: 2,
          math: 105,
          language: 116,
          english: 120,
          physics: 90,
          chemistry: 60,
        },
        {
          name: "瑾瑜",
          class: 3,
          math: 110,
          language: 60,
          english: 120,
          physics: 99,
          chemistry: 98,
        },
      ];

      const result = orderStudentGradeFn(students);

      Object.keys(result).forEach((cls) => {
        const clsContainer = document.createElement("div");
        clsContainer.className = "cls";

        const clsHeader = document.createElement("div");
        clsHeader.className = "cls-header";
        clsHeader.innerText = `${cls}`;
        clsContainer.appendChild(clsHeader);

        const table = document.createElement("table");
        table.border = 1;
        table.align = "center";
        table.width = "100%";

        const header = document.createElement("tr");

        const th1 = document.createElement("th");
        th1.innerText = "姓名";
        header.appendChild(th1);

        const th2 = document.createElement("th");
        th2.innerText = "语文";
        header.appendChild(th2);

        const th3 = document.createElement("th");
        th3.innerText = "数学";
        header.appendChild(th3);

        const th4 = document.createElement("th");
        th4.innerText = "英语";
        header.appendChild(th4);

        const th5 = document.createElement("th");
        th5.innerText = "物理";
        header.appendChild(th5);

        const th6 = document.createElement("th");
        th6.innerText = "化学";
        header.appendChild(th6);

        const th7 = document.createElement("th");
        th7.innerText = "总分";
        header.appendChild(th7);

        table.appendChild(header);

        const students = result[cls];

        students.forEach((student) => {
          const tr = document.createElement("tr");
          const td1 = document.createElement("td");
          td1.innerText = student.name;
          tr.appendChild(td1);

          const td2 = document.createElement("td");
          td2.innerText = student.language;
          tr.appendChild(td2);

          const td3 = document.createElement("td");
          td3.innerText = student.math;
          tr.appendChild(td3);

          const td4 = document.createElement("td");
          td4.innerText = student.english;
          tr.appendChild(td4);

          const td5 = document.createElement("td");
          td5.innerText = student.physics;
          tr.appendChild(td5);

          const td6 = document.createElement("td");
          td6.innerText = student.chemistry;
          tr.appendChild(td6);

          const td7 = document.createElement("td");
          td7.innerText =
            student.math +
            student.language +
            student.english +
            student.physics +
            student.chemistry;
          tr.appendChild(td7);

          table.appendChild(tr);
        });

        clsContainer.appendChild(table);
        output.appendChild(clsContainer);
      });
    </script>
  </body>
</html>

student-grade.js

function orderStudentGrade(students) {
  // TODO: 在这里写入具体的实现逻辑
  // 将学生的成绩按班级分组,同一班级中按照总分从高到底排序
}

module.exports = orderStudentGrade; // 检测需要,请勿删除

五、答案

function orderStudentGrade(students) {
  // TODO: 在这里写入具体的实现逻辑
  //如果传入的学生成绩列表为空,则返回一个空对象
  if(students==''){
    return {}
  }
  let newObj = {
    1: [],
    2: [],
    3: [],
  };
  //按班级分类
  students.forEach(item=>{
    newObj[item.class].push(item)
  })
  //排序
  //1.计算总分
  for(item in newObj){
    for(item2 in newObj[item]){
      let obj = newObj[item][item2]
      obj.total = obj.math+obj.language+obj.english+obj.physics+obj.chemistry
    }
  }
  // //2.sort排序
  for(item in newObj){
    newObj[item].sort((a,b)=>{return b.total-a.total})
  }
  //3.删除total
  for(item in newObj){
    for(item2 in newObj[item]){
      let obj = newObj[item][item2]
      delete obj.total 
    }
  }
  return newObj
}

module.exports = orderStudentGrade; // 检测需要,请勿删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/606676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装Pygame库:在Python中创建游戏的第一步

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 安装Pygame库 方法一、在pycharm内部直接安装 方法二、通过pip直接安装 验证安装 前言 Pygame是一个功能强大的Python游戏开发库&#xff0c;它提…

MCU器件选型---主流厂商

MCU(Micro Controller Unit)中文名称为微控制单元&#xff0c;又称单片微型计算机(Single Chip Microcomputer)&#xff0c;是指随着大规模集成电路的出现及其发展&#xff0c;将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上&#xff0c;形成芯片级的计算机&…

SSRF漏洞、SQL注入、CSRF漏洞、XXE漏洞

SSRF漏洞 1.我理解的定义&#xff1a; 攻击者将伪造的服务器请求发给一个用户&#xff0c;用户接受后&#xff0c;攻击者利用该安全漏洞获得该用户的相关信息 2.原理&#xff1a; 3.场景&#xff1a; &#xff08;1&#xff09;分享 &#xff08;2&#xff09;转码 &#xff…

网络编程知识点总结(4)

sock服务端代码实现读写 前几章有具体介绍这几个函数&#xff0c;这里就简单罗列出来了 &#xff08;1&#xff09;socket()函数 int socket(int domain, int type, int protocol); &#xff08;2&#xff09;bind()函数: IP号端口号与相应描述字赋值函数 int bind(int soc…

shell编程之for循环

文章目录 shell编程之for循环一.for语句1.什么是for循环2.for语句的结构3.for语句中常用转义字符 二.for语句应用示例1.批量添加用户2.根据IP地址检查主机状态三.循环的次数1.循环次数的格式2.循环次数示例2.1求1-100的整数求和2.2 1-10的偶数求和 3.步长——seq3.1 1-10的偶的…

JavaScript对象详解(六)

JavaScript对象详解 1、对象的使用1.1、使用对象字面量法1.2、使用构造函数1.3、使用 Object.create() 2、继承与原型链2.1、基于原型链的继承2.1.1、继承属性2.1.2、继承方法 2.2、不同方式所生成的原型链2.2.1、使用语法结构2.2.2、使用构造器2.2.3、使用Object.create()2.2.…

【锂离子电池容量估算】电池单元总容量的递归近似加权总最小二乘估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

论文笔记--Deep contextualized word representations

论文笔记--Deep contextualized word representations 1. 文章简介2. 文章概括3 文章重点技术3.1 BiLM(Bidirectional Language Model)3.2 ELMo3.3 将ELMo用于NLP监督任务 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Deep contextualized word representations作者…

MMPose(openmmlab AI实战营二期第一节)

链接&#xff1a;人体关键点检测与MMPose_哔哩哔哩_bilibili 赶了个进度&#xff0c;实际上没听到&#xff0c;一个方向被浓缩成50分钟是有点难度。后续有需要再回顾吧 人体姿态估计&#xff1a;识别人体关键点坐标。模式识别任务&#xff0c;难点是始终在变化。以关键点连线…

chatgpt赋能python:如何使用Python匹配IP地址

如何使用Python匹配IP地址 如果你是一位网络管理员或是网络安全专家&#xff0c;那么你很可能需要经常处理IP地址。在一些情况下&#xff0c;你需要使用Python来自动化匹配或验证IP地址。在本文中&#xff0c;我们将介绍如何使用Python匹配IP地址。 IP地址的基础知识 在介绍…

地震segy数据高效读写库cigsegy在windows系统的编译

https://github.com/JintaoLee-Roger/cigsegy 一个读写 segy 格式地震数据的 python 和 c 工具。可以将 segy 格式文件读到内存或者直接转为二进制文件&#xff0c;也可以将一个 numpy 数据存储为segy格式的文件。 特点: 快&#xff0c;底层使用c实现可以在python中使用&…

皮卡丘XXE/URL重定向/SSRF

一.XXE 1.概述 XXE -"xml external entity injection" 既"xml外部实体注入漏洞"。 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题" 也就是说服务端接收和解析了来自用户端的xml数据,而又…

chatgpt赋能python:Python升级所有包:一步引导所有Python开发者升级你的Python环境

Python升级所有包&#xff1a;一步引导所有Python开发者升级你的Python环境 Python作为一种动态的编程语言&#xff0c;一直在不断发展和更新。每个Python版本都有自己的新功能和改进。因此&#xff0c;许多Python开发者在使用Python时都会尝试升级到最新的版本。但是&#xf…

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 1. 文章简介2. 文章概括3 文章重点技术3.1 Segment-Level Recurrence with State Reuse3.2 相对位置编码 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Transformer-XL: Attent…

Spring集合

目录 SpringSpring简介Spring概述Spring FrameworkSpring Framework特征 IOC1、IOC的思想(1)传统方式的获取资源(2)控制反转方式的获取资源(3)DI 2、IOC 容器的两种实现BeanFactoryApplicationContext 基于XML管理bean1.创建Maven2.引入依赖3.创建HelloWorld.Java类4.创建sprin…

【Java】单例设计模式-饿汉模式和懒汉模式

单例模式概念如何设计 饿汉模式懒汉模式分析造成线程不安全的原因解决方法 总结 单例模式 概念 单例是一种设计模式。单例指的是在全局范围内只有一个实例对象。比如在学习JDBC编码时使用的DataSource&#xff0c;定义了数据库的用户名&#xff0c;密码和连接串&#xff0c;定…

以太网交换机自学习和转发帧的流程

以太网交换机自学习和转发帧的流程 笔记来源&#xff1a; 湖科大教书匠&#xff1a;以太网交换机自学习和转发帧的流程 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 以太网交换机工作在数据链路层&#xff08;也包括物理层&#xff09; 以太网交…

大数据处理领域的经典框架:MapReduce详解与应用【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 MapReduce是一个经典的大数据处理框架&#xff0c;可以帮助我们高效地处理庞大的数据集。本文将介绍MapReduce的基本原理和实现方法&#xff0c;并给出一个简单的示例。 一、MapR…

文件上传漏洞、XSS漏洞、RCE漏洞

文件上传漏洞 1.定义&#xff1a;指用户上传了一个可执行的脚本文件&#xff08;常见头像&#xff0c;简历&#xff0c;资源&#xff0c;附件&#xff0c;编辑器&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。 2.所需条件 &#xff08;1&#xff0…

什么是“支付二清”,“二清”的定义

“二清”的定义&#xff1a; 支付行业的"二清"是指二次清算&#xff0c;也称为二级清算。在支付行业中&#xff0c;清算是指在交易完成后&#xff0c;将资金从付款人账户转移到收款人账户的过程。一级清算通常由银行完成&#xff0c;而二级清算则是指由支付机构或清…