javascript - '3.0.11' > '3.0.9'这样的需求用JS怎么实现比较优雅
高洛峰
高洛峰 2017-04-11 11:51:01
[JavaScript讨论组]

'3.0.11' > '3.0.9'这样的需求用JS怎么实现比较优雅

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(8)
伊谢尔伦

提供一个新思路

function compare(a,b) {
  var as = a.split('.')
  var bs = b.split('.')
  return new Date(as[0],as[1],as[2]) > new Date(bs[0],bs[1],bs[2])
}

compare('3.0.11','3.0.9')//true
compare('3.0.11','3.0.20')//false
compare('4.0.11','3.0.20')//true
大家讲道理
function compare(v1,v2){
  v1=v1.split('.');
  v2=v2.split('.');
  for(var i=0;i<v1.length;i++){
    if(parseInt(v1[i])>parseInt(v2[i]))return true;
    if(parseInt(v1[i])<parseInt(v2[i]))return false;
  }
  return 'same';
}
大家讲道理
function compare(version1,version2){
  var v1=version1.split('.'),
      v2=version2.split('.');
  for(var i=0;i<v1.length;i++){
    if(parseInt(v1[i])>parseInt(v2[i])) return true;
    if(parseInt(v1[i])<parseInt(v2[i])) return false;
  }
  return false; //还要考虑相等的情况
}

console.log(compare('2.3.1', '2.3.0'))//true
console.log(compare('2.3.0', '2.3.2'))//false
console.log(compare('2.3.0', '2.3.0'))//false 
PHPz
function compare(a, b) {
     return +a.match(/\d/g).join('') > +b.match(/\d/g).join('')
}

console.log(compare('3.0.12', '3.0.11'))
console.log(compare('3.0.1', '3.0.11')) //false
console.log(compare('3.1.1', '3.0.11')) //false
console.log(compare('AAAS3.1.1', 'AAAS3.0.11')) //false
天蓬老师
function parseVersion(str){
    var arr = str.split('.'),
    num = 0,
    base = 1000;
    for(var i = 0; i < arr.length; i++){
        num *= base;
        num += +arr[i];
    }
    return num;
}
parseVersion('1.0.0')  //1000000
parseVersion('3.0.10') //3000010

先转换成数字,然后就可以直接用数字比较了

黄舟

转换成'xx.xx.xx',用字符串比较大小,对版本号层级无要求:

function padLeft(value, length, char) {
    var times = (length || 2) - value.toString().length;
    var padding = '';
    for(var i = 0; i < times; i++){
        padding += char || '0';
    }
    return padding + value;
}

function parseVersion(version) {
    if(!version){
        return '0';
    }
    var ret = '';
    var parts = version.split('.');
    parts.forEach(function (part) {
        ret += padLeft(part, 2, '0') + '.';
    });
    return ret.substr(0, ret.length - 1);
};

parseVersion('3.0.11') > parseVersion('3.0.9')
高洛峰
var r = new RegExp(/\.(?=[0-9](\.|$))/g);
'3.0.11'.replace(r,".0") > '3.0.9'.replace(r,".0");
大家讲道理

a1 = parseInt(a1.split('.').reduce((i,j)=>i+j));
a2 = parseInt(a2.split('.').reduce((i,j)=>i+j));
console.log((a1-a2)>0?'>':'<');

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号