练习一:综合成绩统计与评级系统
编写一个名为 analyzeGrades 的函数,该函数接收一个包含若干学生成绩(0-100之间的数字)的数组作为参数。请完成以下功能:
数据清洗:过滤掉数组中无效的数据(非数字类型、小于0或大于100的数值),将有效成绩存入一个新数组。
基础统计:计算有效成绩的总分、平均分、最高分和最低分。
等级判定:遍历有效成绩数组,根据分数段判断等级(90-100为"优",80-89为"良",60-79为"中",60以下为"差"),并统计各等级的人数。
结果返回:返回一个对象,包含有效成绩数组、总分、平均分、最高分、最低分以及等级统计对象。
代码如下:
javascript
function analyzeGrades(grades){
let validGrades = [];
for (let i = 0; i < grades.length;i++){
let score = grades[i];
if (typeof score === 'number' && score >=0 && score <= 100){
validGrades.push(score);
}
}
let totalScore = 0;
let averageScore = 0;
let maxScore = 0;
let minScore = 0;
if(validGrades.length > 0){
for (let score of validGrades){
totalScore += score;
}
averageScore = Math.round((totalScore / validGrades.length) * 100) / 100;
maxScore = validGrades[0];
minScore = validGrades[0];
for (let score of validGrades){
if(score > maxScore)maxScore = score;
if(score < minScore)minScore = score;
}
}
let gradesStats = {优: 0, 良: 0, 中: 0, 差: 0 };
for (let score of validGrades){
if(score >= 90){
gradesStats.优++;
} else if (score >= 80){
gradesStats.良++;
} else if (score >= 60){
gradesStats.中++;
} else {
gradesStats.差++;
}
}
return{
validGrades: validGrades,
totalScore:totalScore,
averageScore: averageScore,
maxScore: maxScore,
minScore: minScore,
gradesStats: gradesStats
};
}
const testGrades = [95,88,72,55,-10,105,'80'];
console.log(analyzeGrades(testGrades));
运行结果如下:

接收一堆学生成绩,先挑出有效的成绩,再算总分 / 平均分 / 最高分 / 最低分,接着统计优 / 良 / 中 / 差的人数,最后把这些结果都整理好返回。
练习二:寻找"完数"
题目描述:
一个数如果恰好等于它的所有真因子(即除了自身以外的约数)之和,这个数就被称为"完数"。例如:6 = 1 + 2 + 3,所以6是完数。
请编写一个函数 findPerfectNumbers(start, end),找出并返回 start 到 end 范围内(包含两头)所有的完数组成的数组。
要求:
函数接收两个数字参数 start 和 end。
使用嵌套循环:外层循环遍历范围内的每一个数字,内层循环寻找该数字的因子。
如果该数是完数,将其存入结果数组。
返回该数组。
代码如下:
javascript
let 完数列表 = [];
function findPerfectNumbers(start, end) {
let 完数列表 = [];
for (let 当前数 = start; 当前数 <= end; 当前数++) {
if (当前数 < 2) {
continue;
}
let 真因子总和 = 0;
for (let 除数 = 1; 除数 <= 当前数 / 2; 除数++) {
if (当前数 % 除数 === 0) {
真因子总和 = 真因子总和 + 除数;
}
}
if (真因子总和 === 当前数) {
完数列表.push(当前数);
}
}
return 完数列表;
}
console.log("1到100的完数:", findPerfectNumbers(1, 100));
console.log("5到30的完数:", findPerfectNumbers(5, 30));
运行结果如下:

外层循环:挨个 "排查" 数字
跳过无效数
内层循环:找当前数的 "真因子"
判断是不是完数
练习三:数组合并与去重
题目描述:
编写一个函数 mergeArrays(arr1, arr2),将两个数组合并成一个新的数组,并去除其中重复的数字(如果两个数组中有相同的数字,新数组中只保留一个)。
要求:
函数接收两个数组参数 arr1 和 arr2。
创建一个空数组 result 用于存放结果。
先将 arr1 中的所有元素添加到 result 中。
再遍历 arr2,对于 arr2 中的每一个元素,检查它在 arr1 或 result 中是否已经存在。
如果不存在,才将其添加到 result 中。
返回 result。
示例:
输入:mergeArrays([1, 2, 3], [2, 3, 4, 5])
输出:[1, 2, 3, 4, 5]
javascript
function mergeArrays(arr1, arr2) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
result.push(arr1[i]);
}
for (let j = 0; j < arr2.length; j++) {
let currentItem = arr2[j];
let isExist = false;
for (let k = 0; k < result.length; k++) {
if (currentItem === result[k]) {
isExist = true;
break;
}
}
if (!isExist) {
result.push(currentItem);
}
}
return result;
}
console.log(mergeArrays([1, 2, 3], [2, 3, 4, 5]));
console.log(mergeArrays([5, 6, 7], [7, 8, 9, 5]));
代码运行结果:

准备结果数组
先装第一个数组的元素
检查第二个数组的元素
返回结果