javascript练习题

练习一:综合成绩统计与评级系统

编写一个名为 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])); 

代码运行结果:

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

相关推荐
Wenweno0o12 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
@yanyu66613 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
chenjingming66613 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
@大迁世界13 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript
cch891813 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳13 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发13 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense13 小时前
设计模式之工厂模式
java·开发语言·设计模式
风止何安啊13 小时前
为什么要有 TypeScript?让 JS 告别 “薛定谔的 Bug”
前端·javascript·面试
‎ദ്ദിᵔ.˛.ᵔ₎13 小时前
STL 栈 队列
开发语言·c++