js中版本号的比较

  • Post author:
  • Post category:其他




1. 背景

在开发过程中,我们常常需要比较两个版本号的大小,来做一些特殊处理,今天我们就来实现此功能。

假设版本号为非空字符串,并且只包含数字和

.

字符。这种情形下比较两个版本号

version1



version2

,如果

version1 > version2

返回

1

,如果

version1 < version2

返回

-1

, 除此之外返回

0



2. 思路

将版本号字符串拆分成只含数字的数组,依次比较数字大小。

要注意的是比对时不能简单的循环判断有一位大或者小就跳出循环,得一位一位比较;而且应该从大位到小位依次循环比对,到第一个不相同点(包括大于和小于)就跳出循环。如果循环全部走完,则根据版本号长度再次判断。

还有注意下面这种特殊情形:

1



1.0



1.0.0



1.00.0

的版本是一样的。



3. 代码

function compareVersion(version1, version2) {
  const arr1 = version1.split('.')
  const arr2 = version2.split('.')
  const length1 = arr1.length
  const length2 = arr2.length
  const minlength = Math.min(length1, length2)
  let i = 0
  for (i ; i < minlength; i++) {
    let a = parseInt(arr1[i])
    let b = parseInt(arr2[i])
    if (a > b) {
      return 1
    } else if (a < b) {
      return -1
    }
  }
  if (length1 > length2) {
    for(let j = i; j < length1; j++) {
      if (parseInt(arr1[j]) != 0) {
        return 1
      }
    }
    return 0
  } else if (length1 < length2) {
    for(let j = i; j < length2; j++) {
      if (parseInt(arr2[j]) != 0) {
        return -1
      }
    }
    return 0
  }
  return 0
}

来测试下:

compareVersion('1.2.4', '1.1.5') // 1
compareVersion('1.2', '1.10.5') // -1
compareVersion('1.00.03', '1.0.03') // 0

这下子就可以愉悦地比较版本号啦。



版权声明:本文为wanglele16原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。