首页 > 其他分享 >牛客JS题(十七)总成绩排名

牛客JS题(十七)总成绩排名

时间:2024-08-02 16:59:26浏览次数:13  
标签:return chinese 总成绩 JS 牛客 english const 拷贝 math

注释很详细,直接上代码

涉及知识点:

  1. 引用传值
  2. 深拷贝
  3. 合理封装

题干:

我的答案

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <script type="text/javascript">
        /**
         * 这题虽然没啥难度但值得斟酌的地方可不少,咱刷题可不能只看结果
         * 
         * 1. 我们已知JS将数组当作参数传递传的是引用,
         *    也就是说我们在函数里面的修改是会修改外部的,那还需要返回值吗,不需要对吧
         *    这里既然需要返回值说明我们不应该修改原数组,也就是说使用深拷贝,
         *    我们的深拷贝采用朴素的方法,使用JSON.parse(JSON.stringify(obj))嵌套
         *    深拷贝会经常使用,所以封装个函数也是情有可原,对吧
         * 
         * 2. sort函数的条件咱之前说过很多次,这次就省略了,
         *    但是计算总分的函数是不是值得封装一下,
         *    如果只是一个一个列举的话,很难复用对吧,所以我们可以传入需要参与计算的属性
         *    当然为了这题方便,我们完全可以给这个参数设个默认值,
         *    考虑到属性值可能字符串存的数字,顺便也转化一下
         */
      const _rank = (array) => {
        const newArray = deepCopy(array);

        // 补全代码
        newArray.sort((firstItem, secondItem) => {
          return getTotalPoints(secondItem) - getTotalPoints(firstItem);
        });
        return newArray;
      };

      /**
       * 获取学生总分
       * @param {object} item - 学生对象
       * @param {string[]} [subjects=["chinese","math","english"]]  - 课程列表
       * @returns {number} - 学生总分
       */
      const getTotalPoints = (
        item,
        subjects = ["chinese", "math", "english"]
      ) => {
        let totalPoints = 0;
        subjects.forEach((subject) => {
          totalPoints += Number(item[subject]);
        });
        return totalPoints;
      };

      /**
       * 深拷贝
       * @param {object} obj - 需要拷贝的对象
       * @returns {object} - 拷贝后的对象
       */
      const deepCopy = (obj) => {
        return JSON.parse(JSON.stringify(obj));
      };

      let students = [
        { id: "1", chinese: 90, math: 90, english: 100 },
        { id: "2", chinese: 90, math: 100, english: 80 },
        { id: "3", chinese: 100, math: 100, english: 90 },
      ];

      console.log(_rank(students));
      console.log(students); //原始数据不变
    </script>
  </body>
</html>

博客更新不是很及时,需要看后面内容的可以看看我的gitee仓库

牛客JS题Gitee仓库

标签:return,chinese,总成绩,JS,牛客,english,const,拷贝,math
From: https://blog.csdn.net/m0_73756108/article/details/140865678

相关文章

  • js对于特殊字符的处理
    特殊字符的检查判断constreg=/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·!#¥(——):;“”‘、,|《。》?、【】[\]]/;if(reg.test(changeGroupName.value)){message.warning('文件夹名称不能包含~!#$%个&*()=+/N[];∵:",?/<>等字符')return} ​特殊字符......
  • JS之File对象与base64字符串之间的相互转换
    File对象有两种形态,在请求时为:控制台输出为:从formData中获得fileList对应的File对象,并转换为base64字符串,再转换回File对象,代码示例如下:constfileList=uploadFormData.get("fileList");console.log(fileList);constreader=newFileReader();reader.readAsDataURL(......
  • 2024牛客暑期多校训练营6 K.The Great Wall 2
    题意给定长为\(n\)的序列\(\{a_i\}\),分成恰好\(k\)个非空连续段使得这\(k\)的极差之和最小,对\(k=1,2,\cdots,n\)分别求解。\(n\le5000\)做法定义:令\(f_{i,j}\)为将前\(i\)个数分成\(j\)段的最小极差之和,令\(w_{l,r}\)为\(a_l,\cdots,a_r\)的极差。按\(j=1\simn\)按层转移:......
  • PixiJS源码分析系列:第四章 响应 Pointer 交互事件(上篇)
    响应Pointer交互事件(上篇)上一章我们分析了sprite在canvasRenderer上的渲染,那么接下来得看看交互上最重要的事件系统了最简单的demo还是用一个最简单的demo演示example/sprite-pointerdown.html为sprite添加一个pointerdown事件,即点击事件,移动设备上就是touc......
  • 前端使用JS内置Blob实现下载各种形式的文件实例
    在前端开发中,JavaScript的Blob对象允许你创建一个包含原始数据的类文件对象。使用Blob可以轻松实现在客户端生成和下载各种类型的文件,例如文本文件、图片、CSV等。下面是一些使用Blob实现文件下载的示例:1.下载文本文件functiondownloadTextFile(filename,text){c......
  • “葡萄城杯”牛客周赛 Round 53
    A 小红小紫投硬币print(1/2)B 小红的字符串s=input()#直接接受输入n=len(s)#计算字符串长度#初始化变量result,用于累加每一步的最小移动次数result=0#遍历字符串的前半部分foriinrange(n//2):#计算当前字符与其对称字符的ASCII码差值......
  • 基于springboot+vue.js+uniapp在线考试系统的附带文章源码部署视频讲解等
    在这里插入图片描述@toc前言......
  • js数组对象根据属性转化成二位数组
    业务场景说明:相信不少开发的小伙伴都遇到过这样的功能,历史足迹列表,时间列表,筛选分类这些,在我们开发功能中经常会遇到后端返回一维数组的分页数据如果对这个数组不作处理直接渲染分页会存在一个问题,那就是上一页数据和下一页数据可能会同时存在同时时间的问题,为了避免出现相......
  • js 并发
    functionconcurRequest(maxnum){returnnewPromise((resolve,reject)=>{letindex=0letcount=0constresults=[]asyncfunctionrequest(){consti=indexconsturl=urls[index]......
  • uni-app h5 使用微信JSSDK的方式
    综合各方经验及文档总结了以下我的使用方法,希望对有需要的同学有些帮助第一步:npminstalljweixin-module--save第二步:common文件夹新建js文件,我这里命名jwx.js jwx.js文件内容varjWeixin=require('jweixin-module');exportdefault{//判断是否在微信中......