点此查看所有教程、项目、源码导航
文章目录
- 1. 背景
- 2. 需求说明
- 3. 完整代码
- 4. 代码分步解读
- 5. 运行输出效果
- 6. 知识点复盘
- 7. 拓展小练习(自己动手改一改)
- 8. 小结
1. 背景
之前我们学了数组各个相关知识点,为了加深大家对数组的理解,本篇来使用数组写一个数据统计类案例 —— 学生成绩统计。
这个案例非常实用,在日常开发、后台统计里面经常见到,同时可以把数组遍历、查找、判断、求和、找最大值最小值全部串起来巩固一遍。
用到的知识依旧是我们已经学过的:数组、for 循环、if 判断、数组相关方法。
还是那句话:数组内置方法不用死记硬背,理解它能实现什么效果就可以,真写代码忘记了随时查阅资料。
2. 需求说明
我们有一个班级的学生成绩数组,需要自动完成下面几件统计工作:
- 遍历输出每一位同学的成绩
- 计算班级总分、平均分
- 找出最高分、最低分
- 统计及格人数(>=60 分)、不及格人数
- 判断是否存在满分 100 分的同学
3. 完整代码
// 班级成绩数组letscoreList=[85,92,56,78,100,66,45,88,73,95];// 定义统计用的变量lettotal=0;// 总分letmaxScore=scoreList[0];// 最高分,初始取第一个成绩letminScore=scoreList[0];// 最低分,初始取第一个成绩letpassCount=0;// 及格人数letfailCount=0;// 不及格人数lethasFullMark=false;// 是否存在满分console.log("===== 学生成绩列表 =====");for(leti=0;i<scoreList.length;i++){letscore=scoreList[i];console.log("第"+(i+1)+"位同学成绩:"+score);// 累加总分total=total+score;// 更新最高分if(score>maxScore){maxScore=score;}// 更新最低分if(score<minScore){minScore=score;}// 判断及格或者不及格if(score>=60){passCount++;}else{failCount++;}// 判断是否是满分if(score===100){hasFullMark=true;}}// 计算平均分,保留2位小数letavg=total/scoreList.length;avg=avg.toFixed(2);console.log("\n===== 班级成绩统计结果 =====");console.log("总分:"+total);console.log("平均分:"+avg);console.log("最高分:"+maxScore);console.log("最低分:"+minScore);console.log("及格人数:"+passCount);console.log("不及格人数:"+failCount);if(hasFullMark){console.log("是否有满分同学:是");}else{console.log("是否有满分同学:否");}4. 代码分步解读
- 先准备好原始数据数组
scoreList,存放所有学生成绩。 - 提前声明一系列统计变量,用来保存最后需要输出的结果。
- 使用普通 for 循环遍历数组,每一轮循环拿到单个学生的成绩。
- 在循环内部同步做一系列判断和计算:
- 不断把成绩加到总分变量上;
- 和当前最高分、最低分对比,更新记录;
- 判断分数是否及格,对应人数 + 1;
- 如果遇到 100 分,标记存在满分。
- 循环全部跑完之后,统一打印最终的统计汇总信息。
补充:
toFixed(2)作用是保留两位小数,是数字的内置功能,这里直接使用,先不用深挖原理。
5. 运行输出效果
=====学生成绩列表=====第1位同学成绩:85第2位同学成绩:92第3位同学成绩:56第4位同学成绩:78第5位同学成绩:100第6位同学成绩:66第7位同学成绩:45第8位同学成绩:88第9位同学成绩:73第10位同学成绩:95=====班级成绩统计结果=====总分:778平均分:77.80最高分:100最低分:45及格人数:8不及格人数:2是否有满分同学:是6. 知识点复盘
这个案例还是比较贴近真实开发的数据处理场景:
- 数组:用来批量存放一组同类型数据(成绩)
- for 循环遍历:挨个取出数据处理,是批量统计的基础
- if 分支判断:做条件筛选、对比
- 数组属性
length:获取数据总条数,用来计算平均分
我们前面学的includes也可以用来简化满分判断,给大家一个拓展写法对比看看:
lethasFullMark=scoreList.includes(100);两种写法效果一样,一种靠循环判断,一种直接使用数组内置方法。
7. 拓展小练习(自己动手改一改)
大家可以基于这个代码自行修改,巩固练习:
- 新增需求:统计 90 分以上优秀的人数
- 新增需求:找出第一个不及格的成绩,输出它的下标(搭配 indexOf)
- 把成绩从小到大排序后再输出(搭配 sort)
8. 小结
像这种数组批量统计,在后台管理系统里面随处可见:订单统计、商品销量统计、用户数据汇总,底层逻辑和这个成绩案例是一模一样的。
数组系列的实战和知识点到这里就全部结束了。
下一章,我们正式开启函数的学习,把前面所有 “内置方法” 背后的原理揭开。