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

项目版本号大小比较

软件版本号格式一般为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	
方案二:转化成整型比较(❌)
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
方案三:版本数字头部补位比较(✅)

我们将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

好了,现在我们已完成了版本之间的大小比较,那如何从版本数组中找出最大的版本号呢?这里使用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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java文件版本号控制通常使用比较系统或系统文件版本号大小的通用函数来实现。这些函数可以比较版本号大小最大的版本号。一个常见的实现方式是将版本号转换为整数或字符串进行比较。在Java中,可以使用String的compareTo方法或自定义的比较函数来实现版本号比较。引用 另外,Java数据库版本控制实例是一种基于备忘录设计模式的实现方式。它的主要功能是对数据操作进行版本控制,类似于SVN。用户可以进行版本提交、修改和恢复等操作。引用这种实例可以帮助开发人员跟踪和管理数据库的变更,确保对数据库的修改和更新是有序和可追溯的。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [在系统中需要版本管理时,比较系统或系统文件版本号大小的通用函数,java实现](https://download.csdn.net/download/jianlongz/6710351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [java版本控制(数据库版本控制)](https://download.csdn.net/download/oceangray/4946281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值