用原生js实现两个版本号的比较,versionCompare (v1,v2),v1、v2是两个参数,代表两个版本号。
函数实现重点是,v1、v2两个参数是string类型。因为版本号是数字和点组成,不保准会有人传进两个数字类型,所以做个判断,将其转化成string。
版本号的比较,要先比较主版本号,所以要把第一个点前面的数字取出来,两个参数比较,如果相同在比较次版本号。
由数字组成的数组,取出来比较式是string类型的比较,这点要注意,需要parseInt转换成数字类型
js实现字符串转化成数字的方法有三种:
转换函数:
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。强制类型转换
还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。利用js变量弱类型转换
利用弱类型转换,进行算术运算,实现了字符串到数字的类型转换
如代码所示:
1
2
3
4
5 <script>
var str= '012.345 ';
var x = str-0;
x = x*1;
</script>
以下是函数实现(版本号之间似乎是用“,”分割的,版本号内部是“.”分割,原理类似)
<script>
function versionCompare (v1,v2) {
if (typeof v1 === "number") {
v1 = "0" + v1;
v1 = v1.substr(1,v1.length-1);
}
if (typeof v2 === "number") {
v2 = "0" + v2;
v2 = v2.substr(1,v2.length-1);
}
if(v1 === v2){
return v1 + "和" + v2 + "版本一样高";
}
var v1Arry = v1.split("."),
v2Arry = v2.split(".");
for (var i = 0; i < v1Arry.length; i++) {
if (i > v2Arry.length) {
return v1 + "版本高";
}else{
if (parseInt(v1Arry[i]) > parseInt(v2Arry[i])) {
return v1 + "版本高";
}else if (parseInt(v1Arry[i]) < parseInt(v2Arry[i])) {
return v2 + "版本高";
}
}
}
return v2 + "版本高";
}
console.log(versionCompare("1.2","1.3"));
console.log(versionCompare('7.23.1','13.34.56'));
var v1 = '12.34.3';
var v2 = '9.2.43';
console.log(versionCompare(v1,v2));
</script>