
js
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function (version1, version2) {
// 将版本号字符串按小数点 "." 分割成数组,方便逐位比较
// 例如:"1.0.1" → ["1", "0", "1"],"1.0" → ["1", "0"]
const versionParts1 = version1.split('.')
const versionParts2 = version2.split('.')
// 获取两个版本号数组的长度,用于后续循环边界判断
const len1 = versionParts1.length
const len2 = versionParts2.length
// 循环比较每一位版本号,循环条件:只要有一个数组还有未比较的元素就继续
// 解决版本号位数不一致的问题(如 "1.0" 和 "1.0.0")
for (let i = 0; i < len1 || i < len2; i++) {
// 取出当前位的版本号:
// 1. 如果当前索引在数组范围内,将字符串转成整数(避免字符串比较的坑,如"10"<"2")
// 2. 如果超出数组范围,补0(符合版本号比较规范,短版本号末尾补0)
const currentVer1 = i < len1 ? parseInt(versionParts1[i], 10) : 0
const currentVer2 = i < len2 ? parseInt(versionParts2[i], 10) : 0
// 比较当前位的版本号,若不相等则直接返回结果
// 无需继续比较后续位,提升执行效率
if (currentVer1 !== currentVer2) {
// 若version1当前位更小,返回-1;否则返回1
return currentVer1 < currentVer2 ? -1 : 1
}
}
// 所有位都比较完毕且全部相等,说明两个版本号完全相同
return 0
}