天天看点

JS 实现版本号比较功能

js实现一个客户端版本号的统计,目前该功能可以实现版本号中数字版本的统计,例如2.2.3 <2.2.3.1, 1.2.3<2.0.0,原理就是从高版本号到次版本号依次比较

1 if (!Array.prototype.trim){
 2                 Array.prototype.trim=function(){
 3                     var  arr=[];
 4                     this.forEach(function(e){
 5                         if(e.match(/\S+/))  arr.push(e);
 6                     })
 7                     return arr;
 8                 }
 9             }
10 
11 function version_compare(a,b) {
12                                 var a_str=a.name.toString();
13                                 var a_version=a_str.split(/\D+/).trim();
14                                 var b_str=b.name.toString();
15                                 var b_version=b_str.split(/\D+/).trim();
16 
17                                 var aLength = a_version.length;
18                                 var bLength = b_version.length;
19                                 var minL = Math.min(aLength,bLength);
20                                     var r = null
21                                     for (var i = 0; i < minL; i++) {
22                                        //此处要转成Number类型,不然比较会出现15<6的情况,可能由于正则匹配造成的,还没有详细探究原因
23                                         var aNum = new Number(a_version[i]);
24                                         var bNum = new Number(b_version[i]);
25                                         if (aNum < bNum) {
26                                             r = 1
27                                             break;
28 
29                                         } else if (aNum >bNum) {
30                                             r = -1;
31                                             break;
32                                         } else if (i == minL-1 && aNum == bNum) {
33 
34                                             if(aLength>minL){
35                                                 r = 1;
36                                                 break;
37                                             }else if(bLength>minL) {
38                                                 r = -1;
39                                                 break;
40                                             }
41                                         }
42 
43                                     }
44                                 return r;
45                                 }