乐趣区

简易项目版本号比对算法

工作中经常会遇到一些版本兼容问题,从而需要对某一特定版本或者此版本上下版本进行筛选,这里我们以 4 位版本为例,写一个简易的版本对比算法。

例如:
需比对的版本,version = ‘1.16.1.0’
参考版本:current = ‘1.5.2.2’

/* 方法说明
 * _numberFormater 数字格式化,不足前面补 0
 * param {string,number} number 需要格式化的数据
 * param {number} n 格式化的长度
 * return {string} 返回格式化后的数据
*/
const _numberFormater = (number, n) => {number = `0000000000000000${number}`
  return number.substring(number.length - n)
}

/* 方法说明
 * checkVersion 版本号比对
 * param {string} version 需比对的版本
 * param {string} current 参照版本
 * return {number} 0:相等 1:大于 -1:小于
*/
const checkVersion = (version, current) => {if (!version || !current) {return false}
  version = version.split('.')
  current = current.split('.')
  const length = current.length
  // 每位转为 000 格式 权值依次减少 1000 100 10 1
  for (let i = 0; i < length; i++) {version[i] = _numberFormater(version[i], length)
    current[i] = _numberFormater(current[i], length)
  }
  const versionNumner = +version[0] * 1000 + +version[1] * 100 + +version[2] * 10 + +version[3] * 1
  const currentNumner = +current[0] * 1000 + +current[1] * 100 + +current[2] * 10 + +current[3] * 1
  if (versionNumner > currentNumner) {return 1} else if (versionNumner === currentNumner) {return 0} else {return -1}
}

使用

checkVersion('1.16.1.0', '1.5.2.2'); // 1

退出移动版