需求很是簡單,須要比較軟件或app的版本號,判斷大小,形如 0.10.2形式的版本號字符串。
實現邏輯是按照點(.)分割字符串,而後逐級比較版本大小。
不存在的按0處理,空字符串小於非空字符串。javascript
'1' = '1'html
'1' = '1.0'java
'1' = '1.0.0'git
'1.0' = '1'github
'1.0' = '1.0'app
'1.0.0' = '1.0'測試
'1.1' > '1'code
'1.1' < '1.1.1'htm
'1.1' = '1.1.0'blog
'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