zoukankan      html  css  js  c++  java
  • versionCompare 版本号比较工具

    简介

    需求非常简单,需要比较软件或app的版本号,判断大小,形如 0.10.2形式的版本号字符串。
    实现逻辑是按照点(.)分割字符串,然后逐级比较版本大小。
    不存在的按0处理,空字符串小于非空字符串。

    测试结果

    '1' = '1'

    '1' = '1.0'

    '1' = '1.0.0'

    '1.0' = '1'

    '1.0' = '1.0'

    '1.0.0' = '1.0'

    '1.1' > '1'

    '1.1' < '1.1.1'

    '1.1' = '1.1.0'

    '1.1.0' = '1.1'

    '0.1.2' < '0.1.2.3'

    '0.1.2' < '0.1.3'

    '0.1.2' < '0.2.2'

    '0.1.2' < '1.1.2'

    '10.20.30' = '10.20.30'

    '10.20.30' < '10.20.30.0.0.0.1'

    '0.10.20.30' < '10.20.30'

    '1' > ''

    '' < '1'

    '' < '0'

    '' = ''

    源码

    /**
     * 对比字符串版本号的大小,返回1则v1大于v2,返回-1则v1小于v2,返回0则v1等于v2
     * 
     * @author xxcanghai@博客园
     * @param {string} v1 要进行比较的版本号1
     * @param {string} v2 要进行比较的版本号2
     * @returns
     */
    function versionCompare(v1, v2) {
        var GTR = 1; //大于
        var LSS = -1; //小于
        var EQU = 0; //等于
        var v1arr = String(v1).split(".").map(function (a) {
            return parseInt(a);
        });
        var v2arr = String(v2).split(".").map(function (a) {
            return parseInt(a);
        });
        var arrLen = Math.max(v1arr.length, v2arr.length);
        var result;
    
        //排除错误调用
        if (v1 == undefined || v2 == undefined) {
            throw new Error();
        }
    
        //检查空字符串,任何非空字符串都大于空字符串
        if (v1.length == 0 && v2.length == 0) {
            return EQU;
        } else if (v1.length == 0) {
            return LSS;
        } else if (v2.length == 0) {
            return GTR;
        }
    
        //循环比较版本号
        for (var i = 0; i < arrLen; i++) {
            result = xxcanghaiComp(v1arr[i], v2arr[i]);
            if (result == EQU) {
                continue;
            } else {
                break;
            }
        }
        return result;
    
        function xxcanghaiComp(n1, n2) {
            if (typeof n1 != "number") {
                n1 = 0;
            }
            if (typeof n2 != "number") {
                n2 = 0;
            }
            if (n1 > n2) {
                return GTR;
            } else if (n1 < n2) {
                return LSS;
            } else {
                return EQU;
            }
        }
    }
    

    在线测试页面 & 源码下载

    Demo:
    http://xxcanghai.github.io/cnblogsFiles/versionCompare/index.html

    所有源码下载GitHub:
    https://github.com/xxcanghai/cnblogsFiles/tree/master/versionCompare

  • 相关阅读:
    CMake 3.8.2 Online Manuals
    如何查找UDID
    产品经理那些事儿学习整理笔记
    IOS KVO与NSNotificationCenter简单使用
    整理分享内容
    iOS解决两个静态库的冲突 duplicate symbol
    IOS 添加libMobileVLCKit .a到项目中编译问题
    OpenERP为form和tree视图同时指定view_id的方法
    openerp related字段解读
    openerp图片路径处理
  • 原文地址:https://www.cnblogs.com/xxcanghai/p/6007136.html
Copyright © 2011-2022 走看看