一般程序版本号形式x.x.x.x的字符串,例如:1.0、1.0.0、1.0.0.0。如果直接采用字符串比较大小,会出现低版本大于高版本的结果,例如:1.10.1和1.9.2比较,就会出现"1.9.2" > "1.10.1"。所以需要对于每一位分开,采用补位的方式逐个比较。
function compairVersion (v1, v2) {
//补位0,或者使用其它字符
const ZERO_STR = '000000000000000000000000000000000000000000';
if (v1 === v2) {
return 0;
}
let len1 = v1 ? v1.length : 0;
let len2 = v2 ? v2.length : 0;
if ( len1 === 0 && len2 === 0) {
return 0;
}
if (len1 === 0) {
return 1;
}
if (len2 === 0) {
return -1;
}
const arr1 = v1.split('.');
const arr2 = v2.split('.');
const length = Math.min(arr1.length, arr2.length);
for (let i = 0; i < length; i++) {
let a = arr1[i];
let b = arr2[i];
if (a.length < b.length) {
a = ZERO_STR.substr(0, b.length - a.length) + a;
} else if (a.length > b.length) {
b = ZERO_STR.substr(0, a.length - b.length) + b;
}
if (a < b) {
return 1;
} else if (a > b) {
return -1;
}
}
if (arr1.length < arr2.length) {
return 1;
} else if (arr1.length > arr2.length) {
return -1;
}
return 0;
}
网友评论