原理:
- 切割要对比的版本号;
- 取长度较长的版本 length 作为循环对比轮次;
- 从低位到高位(即从右到左),循环遍历每一位版本号,缺失则补0,对比大小,
- if num1 > num2: v1 > v2;
- if num1 < num2: v1 < v2;
- 重复步骤 3-5,直到循环结束;
- out 0,此时 版本号 v1 == v2
- 只要有一位不同,则可对比分出大小。若相同,则版本相等。
ts实现
export const compareVersions = (v1: string, v2: string) => {
if (isNil(v1) || isNil(v2)) {
return 0
}
const v1Arr = v1.split('.')
const v2Arr = v2.split('.')
const len = Math.max(v1Arr.length, v2Arr.length)
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1Arr[i] || 0)
const num2 = parseInt(v2Arr[i] || 0)
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}