1. 背景
在开发过程中,我们常常需要比较两个版本号的大小,来做一些特殊处理,今天我们就来实现此功能。
假设版本号为非空字符串,并且只包含数字和
.
字符。这种情形下比较两个版本号
version1
和
version2
,如果
version1 > version2
返回
1
,如果
version1 < version2
返回
-1
, 除此之外返回
0
。
2. 思路
将版本号字符串拆分成只含数字的数组,依次比较数字大小。
要注意的是比对时不能简单的循环判断有一位大或者小就跳出循环,得一位一位比较;而且应该从大位到小位依次循环比对,到第一个不相同点(包括大于和小于)就跳出循环。如果循环全部走完,则根据版本号长度再次判断。
还有注意下面这种特殊情形:
1
和
1.0
、
1.0.0
、
1.00.0
的版本是一样的。
3. 代码
function compareVersion(version1, version2) {
const arr1 = version1.split('.')
const arr2 = version2.split('.')
const length1 = arr1.length
const length2 = arr2.length
const minlength = Math.min(length1, length2)
let i = 0
for (i ; i < minlength; i++) {
let a = parseInt(arr1[i])
let b = parseInt(arr2[i])
if (a > b) {
return 1
} else if (a < b) {
return -1
}
}
if (length1 > length2) {
for(let j = i; j < length1; j++) {
if (parseInt(arr1[j]) != 0) {
return 1
}
}
return 0
} else if (length1 < length2) {
for(let j = i; j < length2; j++) {
if (parseInt(arr2[j]) != 0) {
return -1
}
}
return 0
}
return 0
}
来测试下:
compareVersion('1.2.4', '1.1.5') // 1
compareVersion('1.2', '1.10.5') // -1
compareVersion('1.00.03', '1.0.03') // 0
这下子就可以愉悦地比较版本号啦。
版权声明:本文为wanglele16原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。