Skip to content

版本比较器

作者:江月迟迟
发表于:2024-12-10
字数统计:694 字
预计阅读3分钟

介绍

"MyApp" 应用上线后获得了用户一致好评,为了给用户带来更加新颖的功能,研发团队定期会进行 App 的版本更新,即当用户打开 App 时,检查当前 App 的版本号与服务器上的最新版本号进行比较以此来引导用户完成更新操作。

本题需要在已提供的基础项目中使用 JS 知识封装一个比较两个版本号大小的通用工具函数。

准备

开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:

txt
├── js
│   └── index.js
└── index.html

其中:

  • index.html 是主页面。
  • js/index.js 是需要补充代码的 js 文件。

目标

请在 js/index.js 文件中补全函数 compareVersion 中的代码,该函数接收两个版本号字符串,分别代表当前 App 版本(version1)和服务器最新版本(version2)。函数需要比较这两个版本号的大小,并返回以下结果:

  1. 如果 version1 < version2,返回 -1(数据类型:Number)。
  2. 如果 version1 = version2,返回 0(数据类型:Number)。
  3. 如果 version1 > version2,返回 1(数据类型:Number)。
  4. 如果 version1 或 version2 格式不正确(正确的版本号格式为 "x.y.z",其中 x、y、z 均为非负整数),则返回 'error'(数据类型:String)。

提示:当比较两个版本号时,应先比较第一个数字 x 的大小,如果相同则比较第二个数字 y 的大小,以此类推。例如,1.2.3 的版本号比 1.2.2 大,1.2.2 的版本号比 1.2.10 小。

规定

  • 请勿修改 js/index.js 文件外的任何内容。
  • 请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径、class 名、id 名、图片名等,以免造成判题无法通过。

判分标准

  • 完成目标 1、2、3,得 5 分。
  • 完成目标 4,得 5 分。

总通过次数: 28 | 总提交次数: 28 | 通过率: 100%

难度: 中等 标签: 蓝桥杯, 2023, 国赛, JavaScript, JS 函数封装

题解

js
//比较版本号大小的通用工具函数
function compareVersion(version1, version2) {
    //TODO:待补充代码
    if (!isCorrectVersion(version1) || !isCorrectVersion(version2)) {
        return 'error'
    }
    const versionArr1 = version1.split('.')
    const versionArr2 = version2.split('.')
    for(let i = 0; i < 3; i++) {
        if (parseInt(versionArr1[i]) > parseInt(versionArr2[i])) {
            return 1
        }
        if (parseInt(versionArr1[i]) < parseInt(versionArr2[i])) {
            return -1
        }
    }
    return 0
}

// 判断版本是否正确 return bool
function isCorrectVersion(version) {
    const regex = /^\d+.\d+.\d+$/
    return regex.test(version)
}