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])); 

代码运行结果:

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

相关推荐
Java程序员威哥2 小时前
SpringBoot2.x与3.x自动配置注册差异深度解析:从原理到迁移实战
java·大数据·开发语言·hive·hadoop·spring boot·后端
大哥手下留情2 小时前
Python火车票查询方法介绍
开发语言·python
lixinnnn.2 小时前
字符串拼接:Cities and States S
开发语言·c++·算法
这是个栗子2 小时前
前端开发中的常用工具函数(二)(持续更新中...)
开发语言·前端·javascript
苦藤新鸡2 小时前
38.交换二叉树中所有的左右节点
开发语言·前端·javascript
2501_944521592 小时前
Flutter for OpenHarmony 微动漫App实战:主题配置实现
android·开发语言·前端·javascript·flutter·ecmascript
kk”2 小时前
C++智能指针
开发语言·c++
MX_93592 小时前
以配置非自定义bean来演示bean的实例化方式
java·开发语言·后端
2501_944521593 小时前
Flutter for OpenHarmony 微动漫App实战:动漫卡片组件实现
android·开发语言·javascript·flutter·ecmascript