javascript 比较版本号大小

37 篇文章 0 订阅

懒人专属 ,  没找到合适的, 就自己花时间写了一个,

性能待测试  性能待测试  性能待测试  ! ! ! !

使用场景 :  H5APP开发, 需要有版本更新, 此时需要对比版本显示下载状态

备注 :  1 . 默认规定末尾含字母的形式 b > a ; 

           2 . 暂时不支持单个带字母形式如 : 1.8.1  1.8.1a  或者  1.8.1   1.8b 或者  v1.8.1   1.8.2b

const olds = '1.8.1'
const news = '1.8.3'
let getVersion = {
	splitVersion : function (oldval, newval) {
		// 校验是否传入参数
		if (!oldval || !newval) { console.error('[传入参数不完整!]'); return false }

		// 校验参数是否为string
		if (typeof oldval !== 'string' || typeof newval !== 'string') {console.error('[请传入字符串类型!]'); return false }

		// 检测字母
		const alpA = this.checkAlphabet(oldval)
		const alpB = this.checkAlphabet(newval)

		// 过滤掉版本字母
		let version = null
		let visA = oldval.split(/\.|\D/)
		let visB = newval.split(/\.|\D/)

		// 含字母时重组, 格式需固定
		// 不允许出现单个字母形式1.2.1 | 1.2.1a
		if (alpA && alpB) {
			visA[visA.length - 1] = alpA
			visB[visB.length - 1] = alpB
		}

		this.replaceArry(visA)
		this.replaceArry(visB)
		this.coverZero(visA, visB)

		version = this.checkVersion(visA, visB, oldval, newval)
		console.log(version)
	},
	// 比较版本
	checkVersion: function (visA, visB, oldval, newval) {
		for (let i in visA) {
			for (let j in visB) {
				if (i === j) {
					if (parseInt(visA[i]) < parseInt(visB[j])) { return '最新版本 : ' + newval }
					if (parseInt(visA[i]) > parseInt(visB[j])) { return '已经最新 : ' + oldval }
				}
			}
		}
		return '已经最新 : ' + oldval
	},
	// 替换空元素
	replaceArry : function (item) {
		for (let i in item) {
			if (item[i] === '') { item[i] = "0" }
		}
	},
	// 补全数组长度
	coverZero: function (visA, visB) {
		const lenA = visA.length
		const lenB = visB.length
		if (lenA === lenB) { return false }
		const minVal = lenA > lenB ? lenB : lenA
		const maxVal = lenA > lenB ? lenA : lenB
		const aryVal = lenA > lenB ? visB : visA
		for (let i = minVal; i < maxVal; i++) { aryVal.push("0") }
	},
	// 校验字母
	checkAlphabet: function (item) {
		let reg = /^[A-Za-z]+$/;
		let len = item.length - 1
		let lastNode = item[len]
		if (reg.test(lastNode)) {
			// 转化, 规定默认b > a
			return item.charCodeAt(len).toString()
		}
	}
}
// 调用
getVersion.splitVersion(olds, news)

 ================ a b形式思路 ================

末尾含a b形式的校验实现思路 ,

先判断数组末尾是不是a 或者 b , 其实就是校验是不是字母形式  

如果存在对应下标字母替换charCodeAt(),  继续现有的方法比对 (思路待验证, 先记录)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值