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

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

阅读 3.8k
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 
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?'>':'<');

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题