赞
踩
软件版本号格式一般为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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。