工作中经常会遇到一些版本兼容问题,从而需要对某一特定版本或者此版本上下版本进行筛选,这里我们以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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。