Open tataqiuqiu opened 6 years ago
var versionCompare = (v1, v2) => {
[v1, v2] = [v1, v2].map(el => el.trim())
if (![v1,v2].every(el => /^\d+?(\.(?=\d)\d+?)*?$/.test(el))){
return 0
}
var [v1a, v2a] = [v1, v2].map(el => el.split("."))
for(var i = 0; i < v1a.length; ++i){
if (v2a[i] === undefined){
return 1
}
else if (v1a[i] > v2a[i]){
return 1
}
else if (v1a[i] < v2a[i]){
return -1
}
}
return (v2a[i] === undefined) ? 0 : -1
}
贴个参考答案
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function(version1, version2) {
// 將版本號用小數點切開
var array1 = version1.split(".");
var array2 = version2.split(".");
// 取版本號較長的跑loop
var max = array1.length > array2.length ? array1.length:array2.length ;
for(var i = 0 ; i < max ; i++ ){
var i1 = parseInt(array1[i]);
var i2 = parseInt(array2[i]);
// 如果其中一邊後面已經沒版本號,後面就設為0
// ex. [1.0.1], [1.0] 轉換成 [1.0.1], [1.0.0]作比對
i1 = array1.length < i+1 ? 0 : i1;
i2 = array2.length < i+1 ? 0 : i2;
// 如果相同位置的版號數字不一樣,就可以判斷哪個版號大
// ex. 1.1.5 < 1.2.2,因為在第二個位置時 2>1 就可以得到答案
if(i1 > i2){
return 1;
}
if(i2 > i1){
return -1;
}
}
return 0;
};
function compareVersion(v1, v2) {
var arr1 = v1.split('.')
var arr2 = v2.split('.')
for (var i = 0; i < Math.max(arr1.length, arr2.length); i++) {
var delta = (arr1[i] || 0) - (arr2[i] || 0)
if (delta < 0) return -1
if (delta > 0) return 1
}
return 0
}
比较两个版本号 version1 和 version2。 如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
例如: 输入: version1 = "0.1", version2 = "1.1" 输出: -1
输入: version1 = "1.0.1", version2 = "1" 输出: 1
输入: version1 = "7.5.2.4", version2 = "7.5.3" 输出: -1