• 项目版本号大小比较,找出最大版本号


    项目版本号大小比较

    软件版本号格式一般为X.Y.Z( Major.Minor.Patch),X为主版本号,Y为次版本号,Z为修订号。例如:1.12.123。

    最近在项目中碰到一个业务:需要从版本数组中获取最大的版本号。那我们要怎么处理版本之间的大小比较呢?

    方案一:直接字符串比较(❌)

    字符串比较:是从第一位起逐位进行比较。字符串比较中"10" < “2” 。

    "1.2.0" < "1.10.0" // false
    "2.0.0" < "10.0.0" // false	
    
    • 1
    • 2
    方案二:转化成整型比较(❌)
    let formatVersionNum = (version) => {
    	let resNum = version.toString().replaceAll(".", "")
    	return +resNum
    }
    let v1 = formatVersionNum("1.12.0") // 1120
    let v2 = formatVersionNum("10.1.0"); // 1010
    v1 < v2 // false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    方案三:版本数字头部补位比较(✅)

    我们将X.Y.Z 格式化成12位字符串后进行比较。
    转化规则:按着“.”拆成3个元素,对每位元素进行转化,保证每位元素长度为4,不足4位头补位0,再拼接成12位字符串。例如1.12.123 转化为000100120123

    let formatVersionNum = (version) => {
    	version = version.toString()
    	const [_1st, _2nd, _3rd] = version.split(".").map((x) => `0000${x}`.substr(-4));
    	return `${_1st}${_2nd}${_3rd}`
    }
    let v1 = formatVersionNum("1.12.0") // 000100120000
    let v2 = formatVersionNum("10.1.0"); // 001000010000
    v1 < v2 // true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    好了,现在我们已完成了版本之间的大小比较,那如何从版本数组中找出最大的版本号呢?这里使用reduce进行一一比较就好。

    找出最大版本号

    // 格式化版本号
    let formatVersionNum = (version) => {
    	version = version.toString()
    	const [_1st, _2nd, _3rd] = version.split(".").map((x) => `0000${x}`.substr(-4));
    	return `${_1st}${_2nd}${_3rd}`
    }
    // 获取最大版本号
    let getMaxVersion = (versions) {
    	let maxVersion = versions.reduce((v1, v2) => {
    		const formatV1 = formatVersionNum(v1)
    		const formatV2 = formatVersionNum(v2)
    		if (formatV1 >= formatV2) {
    			return v1
    		} else {
    			return v2
    		}
    	})
    	return maxVersion
    }
    let versions = ['10.2.0', '9.10.123', '12.0.2'];
    let maxVersion = getMaxVersion(versions) // 12.0.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    [附源码]计算机毕业设计基于SpringBoot动漫电影网站
    HDLbits: Dualedge
    4.3 学习理论
    RPC - gRPC简单的demo - 学习/实践
    vim的使用笔记
    leetCode 1143.最长公共子序列 动态规划 + 图解
    maven plugin execution的用法
    QT-串口工具
    设置meta description 为什么显示显示本网站使用第三方cookie和相关技术
    ChatGPT启蒙之旅:弟弟妹妹的关键概念入门
  • 原文地址:https://blog.csdn.net/biubiu640/article/details/126554710