'3.0.11' > '3.0.9'这样的需求用JS怎么实现比较优雅
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?'>':'<');
13 回答12.9k 阅读
7 回答2k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
提供一个新思路