js中版本号的比较

1. 背景

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

假设版本号为非空字符串,并且只包含数字和 . 字符。这种情形下比较两个版本号 version1version2,如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0

2. 思路

将版本号字符串拆分成只含数字的数组,依次比较数字大小。
要注意的是比对时不能简单的循环判断有一位大或者小就跳出循环,得一位一位比较;而且应该从大位到小位依次循环比对,到第一个不相同点(包括大于和小于)就跳出循环。如果循环全部走完,则根据版本号长度再次判断。
还有注意下面这种特殊情形:11.01.0.01.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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值