簡介
需求非常簡單,需要比較軟件或app的版本號,判斷大小,形如 0.10.2形式的版本號字符串。
實現邏輯是按照點(.)分割字符串,然后逐級比較版本大小。
不存在的按0處理,空字符串小於非空字符串。
測試結果
'1' = '1'
'1' = '1.0'
'1' = '1.0.0'
'1.0' = '1'
'1.0' = '1.0'
'1.0.0' = '1.0'
'1.1' > '1'
'1.1' < '1.1.1'
'1.1' = '1.1.0'
'1.1.0' = '1.1'
'0.1.2' < '0.1.2.3'
'0.1.2' < '0.1.3'
'0.1.2' < '0.2.2'
'0.1.2' < '1.1.2'
'10.20.30' = '10.20.30'
'10.20.30' < '10.20.30.0.0.0.1'
'0.10.20.30' < '10.20.30'
'1' > ''
'' < '1'
'' < '0'
'' = ''
源碼
/**
* 對比字符串版本號的大小,返回1則v1大於v2,返回-1則v1小於v2,返回0則v1等於v2
*
* @author xxcanghai@博客園
* @param {string} v1 要進行比較的版本號1
* @param {string} v2 要進行比較的版本號2
* @returns
*/
function versionCompare(v1, v2) {
var GTR = 1; //大於
var LSS = -1; //小於
var EQU = 0; //等於
var v1arr = String(v1).split(".").map(function (a) {
return parseInt(a);
});
var v2arr = String(v2).split(".").map(function (a) {
return parseInt(a);
});
var arrLen = Math.max(v1arr.length, v2arr.length);
var result;
//排除錯誤調用
if (v1 == undefined || v2 == undefined) {
throw new Error();
}
//檢查空字符串,任何非空字符串都大於空字符串
if (v1.length == 0 && v2.length == 0) {
return EQU;
} else if (v1.length == 0) {
return LSS;
} else if (v2.length == 0) {
return GTR;
}
//循環比較版本號
for (var i = 0; i < arrLen; i++) {
result = xxcanghaiComp(v1arr[i], v2arr[i]);
if (result == EQU) {
continue;
} else {
break;
}
}
return result;
function xxcanghaiComp(n1, n2) {
if (typeof n1 != "number") {
n1 = 0;
}
if (typeof n2 != "number") {
n2 = 0;
}
if (n1 > n2) {
return GTR;
} else if (n1 < n2) {
return LSS;
} else {
return EQU;
}
}
}
在線測試頁面 & 源碼下載
Demo:
http://xxcanghai.github.io/cnblogsFiles/versionCompare/index.html
所有源碼下載GitHub:
https://github.com/xxcanghai/cnblogsFiles/tree/master/versionCompare