JavaScript实现版本号比对(含字母)

昨天,有一道面试题,要求是这样的:

  用你熟悉的编程语言,实现一个比较任意两个软件版本号大小的函数,如1.2.3a与1.2.4b进行比较,后者版本号更大,要求:不可以使用系统提示的比较函数;

对于一个接触前端开发时间较短的初级前端来说,我还是认真仔细的思考了一下,下边便是我的代码,如有不足之处,望指出!

 <!DOCTYPE html>
 <html>

 <head>
     <meta charset="utf-8">
     <title>版本号对比</title>
 </head>

 <body>
     <script>
         // 获取数字
         function toNumber(n) {
             var n = n.toString(),
                 n_arr = n.split(/\D/); // 使用正则表达式,截取字符串为数组,字符串中包含非数值型,如字母,则数组元素中会出现空值
             if (n_arr[n_arr.length - 1] == '') {
                 n_arr.pop();
             }

             var n_replace = ['', '0', '00', '000', '0000'],
                 r_n_replace = n_replace.reverse();
             for (var i = 0; i < n_arr.length; i++) {
                 var l = n_arr[i].length;
                 n_arr[i] = r_n_replace[l] + n_arr[i];
             }
             var res = n_arr.join('');
             return res;
         }

         // 获取字母
         function toString(s) {
             var s = s.toString(),
                 reg = s.match(/[a-zA-Z]/g); // 截取字符串中的字母成为数组元素
             if (reg != null) {
                 return reg;
             } else {
                 return null;
             }
         }

         // 版本对比
         function changeVersion(a, b) {
             var a1 = toNumber(a),
                 a2 = toString(a),
                 b1 = toNumber(b),
                 b2 = toString(b);

             if (a1 < b1) {
                 console.log('最新版本号为:' + b);
             } else if (a1 > b1) {
                 console.log('最新版本号为:' + a);
             } else if (a1 === b1) {
                 // 版本号相同时,对比字母,将其转为16进制数,进行比对
                 var a2_str = a2[0].toString(16),
                     b2_str = b2[0].toString(16);
                 if (a2_str < b2_str) {
                     console.log('最新版本号为:' + b);
                 } else if (a2_str > b2_str) {
                     console.log('最新版本号为:' + a);
                 } else if (a2_str === b2_str) {
                     console.log('两版本号相同!最新版本号为:' + a);
                 }
             }
         }
         var a = '1.2.3a',
         b = '1.2.2c';
         changeVersion(a, b);

         var v_n = '1.2.4',
         v_o = '1.1.1c';
     changeVersion(v_n, v_o);
     </script>
 </body>

 </html>

JS实现两版本号大小比较的更多相关文章

  1. JS比较两个数字大小

    js不能直降比较两·个数大小,要先转化为整数再比较大小. parseInt()转化. 出处:http://www.jb51.net/article/98251.htm

  2. 小议 js 下字符串比较大小

    原文:小议 js 下字符串比较大小 之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2 ...

  3. js实现软件版本号的比较

    //js实现软件版本号的比较 //随机举两个例子 pc2.4.3 或者pc3.5.6 /** * 输入 v1,v2 * 返回true代表v1比v2的版本新,false则代表v1与v2相等或者v1< ...

  4. JS比较软件版本号

    JS比较软件版本号 版本号格式为:a.b.c 1.获取版本号中的数字 function toNumber(n) { // 使用正则表达式,截取字符串为数组,字符串中包含非数值型,如字母,则数组元素中会 ...

  5. JS中有两种自加法操作

    JS中有两种自加法操作.它们的运算符是++,它们的函数是向1添加运算符. 我和我的区别在于操作的顺序和组合的方向. 其中:++var被称为预自动添加,变量执行自动添加操作后.它的操作是先执行自动加法操 ...

  6. C# 如何比较版本号大小

    最近遇到了一个数据迁移的问题,因为配置文件的结构发生变化,所以要把低版本的用户数据保存下来,存到最新版本中去. 这里就有一个比较版本号大小的问题了,网上乱七八糟算法一堆,大致意思就是用分割字符串的方法 ...

  7. js保留两位小数

    js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入   保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...

  8. (转)JS获取当前对象大小以及屏幕分辨率等

    原文 JS获取当前对象大小以及屏幕分辨率等   <script type="text/javascript">function getInfo(){       var ...

  9. JS获取当前对象大小以及屏幕分辨率等...

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta nam ...

随机推荐

  1. ORACLE PL/SQL 实例精解之第七章 迭代控制之二

    7.1CONTINUE语句 CONTINUE语句会导致循环终止当前迭代.并且当CONTINUE的条件为TRUE时,开始执行该循环的下一次迭代.需要借助于IF语句来计算COUNTINUE条件.当CONT ...

  2. E20170510-hm

    prototype  n.     原型,雏形,蓝本; omit (omitted)  vt.     省略; 遗漏; autonomous  adj.     自治的; 有自主权的; fold   ...

  3. (水题)洛谷 - P1036 - 选数

    https://www.luogu.org/problemnew/show/P1036 $n$ 才20的数据量,我当时居然还在想怎么分组组合,直接 $2^{20}$ 暴力搞就行了. $x_i $太大了 ...

  4. Android Studio提示忽略大小写

    Android Studio的自动提示功能非常之强大,但是,如果你要输入“String”,你输入“string”,这个是不会提示的,也就是大小写敏感的,不爽是吗? 选择大小写不敏感就ok了!这样你想怎 ...

  5. hdoj5842【水题】

    比赛的时候还特别撒比地写了二分的那个写法,然后wa了一发,因为这个集合的翻译成自然数集.还是转换了一下,还是去写了一个二分. 后面就是出现几种就是多长... 比赛的真的非常非常挫的code-. #in ...

  6. IT兄弟连 JavaWeb教程 经典面试题3

    1.简述什么是重定向? 服务器向浏览器发送—个302状态码及一个Location消息头(该消息头的值是一个地址,称之为重定向地址),浏览器收到后会立即向重定向地址发出请求. 2.简述什么是转发?怎么实 ...

  7. C#中自定义类数组和结构数组的使用

    如有雷同,不胜荣幸,若转载,请注明 C#中自定义类数组和结构数组的使用 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一 ...

  8. 移动端rem.js的使用方法

    下面的代码一是我根据rem的使用经验,自己写的一个rem.js,发现很好用,能适用所有移动端h5页面的自适应需求: 代码一: window.onload = function(){ /*720代表设计 ...

  9. The 17th Zhejiang University Programming Contest Sponsored by TuSimple A

    Marjar Cola Time Limit: 1 Second      Memory Limit: 65536 KB Marjar Cola is on sale now! In order to ...

  10. luogu P3371 & P4779 单源最短路径spfa & 最大堆优化Dijkstra算法

    P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...