js 比较版本号(一)

最近群了有人问如何比较版本号,我好奇的试了一下。

比较版本号,怎么办?懒人的方法是借鉴,先查网上的资料,看看有木有直接的帮过来的。而且直接便捷的好像在茫茫"文海"中,而且发现大多数是Java的,于是这里自己试了下用js 来比较,并试图找到简洁的比较方法。

比较版本号就是对字符串进行比较,这里结合正则表达式处理版本号。

首先,来比较常见的版本号 如 "2.2.3","2.3.0":

js版本号比较--之版本1.0(ps:由于后面进行改进,因此对每次比较加个"版本号" )

//假定字符串的每节数都在5位以下

function toNum(a){
var a=a.toString();
//也可以这样写 var c=a.split(/\./);
var c=a.split(‘.‘);
  var num_place=["","0","00","000","0000"],r=num_place.reverse();
  for (var i=0;i<c.length;i++){
    var len=c[i].length;
             c[i]=r[len]+c[i];
   }
 var res= c.join(‘‘);
 return res;
 }
function cpr_version(a,b){
           var _a=toNum(a),_b=toNum(b);
       if(_a==_b) console.log("版本号相同!版本号为:"+a);
       if(_a>_b)  console.log("版本号"+a+"是新版本!");
       if(_a<_b)  console.log("版本号"+b+"是新版本!");
}
var a="2.2.3";b="2.3.0";

    cpr_version(a,b);

  在chrome 控制台中执行结果:

多来几组:

有的版本号可能带有字母,如何比较呢?如  "v2.2.3","v2.3.0",   不用着急,用正则表达式,改动一点点即可:

js版本号比较--之版本1.1

//假定字符串的每节数都在5位以下function toNum(a){
var a=a.toString();
//这里变了
var c=a.split(/\D/);
    var num_place=["","0","00","000","0000"],r=num_place.reverse();
    for (var i=0;i<c.length;i++){
        var len=c[i].length;
             c[i]=r[len]+c[i];
   }
 var res= c.join(‘‘);
 return res;
 }
function cpr_version(a,b){
           var _a=toNum(a),_b=toNum(b);
       if(_a==_b) console.log("版本号相同!版本号为:"+a);
       if(_a>_b)  console.log("版本号"+a+"是新版本!");
       if(_a<_b)  console.log("版本号"+b+"是新版本!");
}
var a="v2.2.3";b="v2.3.0";

    cpr_version(a,b);
var a="v2.21";b="v2.3.10";

    cpr_version(a,b);
var a="v3.1.25";b="v3.1.25";

    cpr_version(a,b);

执行结果:

到这里,js比较版本号基本结束。在网上看到居然有类似这种"2.3.0a","2.3.0b"版本号,显然后一种版本新一些。如果有,该如何比较呢?

思路不变,上面已经处里好了数字的,接下来只需比较字母的顺序:

js版本号比较之--版本1.2



//假定字符串的每节数都在5位以下
//去除数组空值||空格值
if (!Array.prototype.trim){
    Array.prototype.trim=function(){
       var  arr=[];
       this.forEach(function(e){
       if(e.match(/\S+/))  arr.push(e);
       })
       return arr;
        }
    }

//提取数字部分
function toNum(a){
 var a=a.toString();
var c=a.split(/\D/).trim();
  var num_place=["","0","00","000","0000"],r=num_place.reverse();
  for (var i=0;i<c.length;i++){
    var len=c[i].length;
             c[i]=r[len]+c[i];
   }
 var res= c.join(‘‘);
 return res;
 } 

//提取字符
function toChar(a){
  var a=a.toString();
  var c=a.split(/\.|\d/).join(‘‘);
  return c;
}

function cpr_version(a,b){

 var _a1=toNum(a),_a2= toChar(a),
     _b1=toNum(b),_b2= toChar(b);
 if(_a1>_b1)  console.log("版本号"+a+"是新版本!");
 if(_a1<_b1)  console.log("版本号"+b+"是新版本!");
 if(_a1===_b1)  {
      _a2=_a2.charCodeAt(0).toString(16);
      _b2=_b2.charCodeAt(0).toString(16);
      if (_a2>_b2)  console.log("版本号"+a+"是新版本!");
      if(_a2<_b2)   console.log("版本号"+b+"是新版本!");
      if(_a2===_b2)   console.log("版本号相同!版本号为:"+a);
 }
}

var a="2.3.0a",b="2.3.0b";

cpr_version(a,b);
var a="2.3.0c",b="2.3.0c";

cpr_version(a,b);
  在chrome 控制台中执行结果:

  

至此,带字符升级模式的版本号也比较完了。当然,上面的脚本只能比较带一个字母字符的,带多个字母字符的"版本号"不常见,在此略去。上面也只是比较

了一对,如果有多组版本号,改如何处理呢?请看笔者文章:js比较版本号(二)

时间: 2024-10-18 13:36:44

js 比较版本号(一)的相关文章

js 比较版本号(二)

在上一篇文章--js 比较版本号(一)中,笔者利用js使用自己的方法复杂的处理了下只有一对字符串的版本号比较.为什么复杂呢,  因为不适用一堆版本号的比较,需要更多的代码,那有又如何解决呢? 事实上,js已经为我们封装好了排序函数sort(),能很好的便捷解决字符串比较,排序的问题,真是"踏破铁鞋无觅处,得来全不费工夫". w3c上有很好的2个例子[1],搬过来码在这里: 测试1: var a=["10","5","40",&

关于Js添加版本号

背景 在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css.js等,而不必从你的服务器读取,这样在一定程度上加快了网站的打开速度,又可以节约一下你的服务器流量. 问题 现在问题来了,.htaccess设置的css.js缓存都有一个过期时间,如果在访客的浏览器中已经缓存了css.js,在这些css.js缓存未过期之前,浏览器只会

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 }

【js】版本号对比处理方案

今天在处理一个bug问题,适配客户端版本:若版本号未达到,则不可运行该功能,若达到则可运行. 版本号规则如下:(一般统一为2个点,其他的是数字,版本号从高位到低位,首位越大则越大,首位相同则对比下一位...) 版本由低到高:6.10.9 7.9.5 7.10.3 7.21.1 来看下怎么实现. 实现原理: 取出当前版本号,传递目标版本号.将他们分别分割成数组.每个元素进行对比.第一位大的就大,第一位相同就对比下一位...循环. 假设当前版本号为: 调用输出结果: 7.9.5 > 6.10.1 7

ASP.NET JS和CSS通过版本号控制缓存

Web.Config里加 <!--JS/CSS版本号控制-->    <add key="jscssVer" value ="1.0.0031"/> 页面CS里加 public string GetVer()     {         string sVer = ConfigurationManager.AppSettings["jscssVer"];         return sVer;     } 页面调用 &l

vue.js在windows本地下搭建环境和创建项目

Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用. 首先vue.js的作者是中国人,所以说他是国产的,吸收了google的angular.js和facebook的react.js的特性,摒弃了jquery传统的DOM操作,采用数据绑定和指令等概念,可以说是未来WEB端开发的

.NET程序员也学Node.js——初识Node.js

清明在石门休了八天假,一眨眼,4月又到中旬了...看到.NET在天朝彻底沦陷而又无能为力,我开始尝试去学习一些新的东西来充实自己,我自然是打死不会去学java的,没有为什么,于是乎,最近开始学习一些前端的开发技术,就让学习笔记来记录一下我的学习历程并同大家一起分享吧! 申明:我只是业余学着好玩的,顺便扩展一下视野,各位广大.NET同行不要被我带沟里去了,当然如果你想从事移动前端或者全栈开发的话还是有必要学习一下的. Node.js简介 Node.js 的推出,不仅从工程化的角度自动化掉更多琐碎费

Gulp自动添加版本号

转载自:http://www.cnblogs.com/givebest/ 推荐使用gulp-rev + gulp-rev-collector是比较方便的方法,结果如下: "/css/style.css" => "/dist/css/style-1d87bebe.css" "/js/script1.js" => "/dist/script1-61e0be79.js" "cdn/image.gif"

D3.js 整体展示篇

近期一段时间研究社会成员网络关系图的一些可视化展示,对大数据可视化这片荒漠一筹莫展的自己,幸好发现了D3这片充满活力的绿洲.我决定在这块宝地贪婪地大餐一番. 本文介绍主要来自官网翻译及用户使用后感想资料收集 D3.js是一个对数据(主要针对大数据)进行操纵使之实现可视化的JavaScript库. D3可以借助HTML.SVG和CSS等技术将数据展示出来. 通俗点,就是网页制图,生成互动图. 介绍D3的中文书籍如今 仅仅有 <数据可视化实战-使用D3设计交互式图表>,有兴趣大家能够看看 长处: