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 版权协议,转载请附上原文出处链接和本声明。
