大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
之前两天搞得头皮发麻,有个需求是写个版本比较的方法,比如 ‘10.5.4’ 版本是否大于’9.52.1′ 版本 。正常的思路是使用split去截取几段,然后做递归比较。如下:
//版本对比
const sort = (item1, item2) => {
if (item1[0] > item2[0]) {
return true
} else if (item1[0] < item2[0]) {
return false
} else {
if (item1.length === 0) {
return true
}
item1.shift()
item2.shift()
return sort(item1, item2)
}
}
const compareVersion = (val1, val2) => {
if (!val1) {
return false
}
val1 = val1.split('.').map(item=>Number(item))
val2 = val2.split('.').map(item=>Number(item))
return sort(val1, val2)
}
这样显然会比较麻烦,如果使用 padStart方法转换下思路的话,就会变得很简单。
const compareVersion = (v1, v2) => {
if (!v1) {
return false
}
v1 = v1.split('.').map(item => item.padStart(3, 0))
v2 = v2.split('.').map(item => item.padStart(3, 0))
return Number(v1.join('')) >= Number(v2.join(''))
}
但是再使用这个方法的过程中,却出现了天坑。
之前自己在本地的chrome环境里测试是全完没有问题的,然后在测试环境也完全没有问题,但是一发生产环境就报错了。期间各种排查原因,无法解释一套代码为何会出现不同结果。
最后使用了第一种方法解决了这个问题,稍后又查了文档
padStart是属于es2017的方法也就是俗称的es8,版本过高,确实可能会产生不兼容的问题。至于为什么测试环境没问题,猜测可能是测试环境与正式环境并非一样版本,比如可能babel编译版本不同造成的。
所以以后写代码的时候也不能过于追求简洁,当然在后面又将padStart方法的实现进行了下重写,也可以解决这个问题。
const compareVersion = (v1, v2) => {
return transArray(v1) >= transArray(v2)
}
const transArray = (arr) => {
return Number(arr.split('.').map(item => {
let length = item.length;
for(let i = 0; i < 3 - length; i++) {
item = '0' + item;
}
return item
}).join(''));
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195602.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...