给你两个版本号 version1和 version2,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个连接。每个修订号由 多位数字 组成,可能包含 前导零。
每个版本号至少包含一个字符修订号从左到右编号,下标从0开始,最左边的修订号下标为 0,下个修订号下标为1
以此类推。例如,2.5.33 和 01 都是有效的版本号
比较版本号时,请按从左到右的顺序依次比较它们的修订号。
比较修订号时,只需比较 忽略任何前导零后的整数值。也就是说,修订号1和修订号001 相等。
如果版本号没有指定某个下标处的修订号,则该修订号视为0。
例如,版本1.0小于版本1.1,因为它们下标为0的修订号相同,而下标为1的修订号分别为0和1,0<1。
返回规则如下.
如果 version1 > version2 返回1
如果 version1 < version2 返回-1
除此之外返回 0。
1.暴力解法
function compareVersion(version1, version2) {
const newVersion1 = `${version1}`.split('.').length < 3 ? `${version1}`.concat('.0') : `${version1}`;
const newVersion2 = `${version2}`.split('.').length < 3 ? `${version2}`.concat('.0') : `${version2}`;
//计算版本号大小,转化大小
// 将不满足 4位数的 修订号 补齐
function toNum(a) {
const c = a.toString().split('.');
const num_place = ["", "0", "00", "000", "0000"], r = num_place.reverse();
for (let i = 0; i < c.length; i++) {
const len = c[i].length;
c[i] = r[len] + c[i];
}
return c.join('');
}
//检测版本号是否需要更新
function checkPlugin(a, b) {
const numA = toNum(a);
const numB = toNum(b);
return numA > numB ? 1 : numA < numB ? -1 : 0;
}
return checkPlugin(newVersion1, newVersion2);
}
console.log(compareVersion('0.1', '1.1.1.1')) // 返回-1
console.log(compareVersion('13.37', '1.2'))// 返回1
console.log(compareVersion('1.1', '1.1.0')); // 返回0
2.优化方案padStart
//计算版本号大小,转化大小
function toNum(a) {
const c = a.toString().split('.');
const num_place = []
c.forEach(element => {
num_place.push( element.padStart(4, '0') )
})
return num_place.join('');
}