工作中经常会遇到一些版本兼容问题,从而需要对某一特定版本或者此版本上下版本进行筛选,这里我们以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