JavaScript實現版本號比對(含字母)
昨天,有一道面試題,要求是這樣的:
用你熟悉的編程語言,實現一個比較任意兩個軟件版本號大小的函數,如1.2.3a與1.2.4b進行比較,后者版本號更大,要求:不可以使用系統提示的比較函數;
對於一個接觸前端開發時間較短的初級前端來說,我還是認真仔細的思考了一下,下邊便是我的代碼
1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="utf-8"> 6 <title>版本號對比</title> 7 </head> 8 9 <body> 10 <script> 11 // 獲取數字 12 function toNumber(n) { 13 var n = n.toString(), 14 n_arr = n.split(/\D/); // 使用正則表達式,截取字符串為數組,字符串中包含非數值型,如字母,則數組元素中會出現空值 15 if (n_arr[n_arr.length - 1] == '') { 16 n_arr.pop(); 17 } 18 19 var n_replace = ['', '0', '00', '000', '0000'], 20 r_n_replace = n_replace.reverse(); 21 for (var i = 0; i < n_arr.length; i++) { 22 var l = n_arr[i].length; 23 n_arr[i] = r_n_replace[l] + n_arr[i]; 24 } 25 var res = n_arr.join(''); 26 return res; 27 } 28 29 // 獲取字母 30 function toString(s) { 31 var s = s.toString(), 32 reg = s.match(/[a-zA-Z]/g); // 截取字符串中的字母成為數組元素 33 if (reg != null) { 34 return reg; 35 } else { 36 return null; 37 } 38 } 39 40 // 版本對比 41 function changeVersion(a, b) { 42 var a1 = toNumber(a), 43 a2 = toString(a), 44 b1 = toNumber(b), 45 b2 = toString(b); 46 47 if (a1 < b1) { 48 console.log('最新版本號為:' + b); 49 } else if (a1 > b1) { 50 console.log('最新版本號為:' + a); 51 } else if (a1 === b1) { 52 // 版本號相同時,對比字母,將其轉為16進制數,進行比對 53 var a2_str = a2[0].toString(16), 54 b2_str = b2[0].toString(16); 55 if (a2_str < b2_str) { 56 console.log('最新版本號為:' + b); 57 } else if (a2_str > b2_str) { 58 console.log('最新版本號為:' + a); 59 } else if (a2_str === b2_str) { 60 console.log('兩版本號相同!最新版本號為:' + a); 61 } 62 } 63 } 64 var a = '1.2.3a', 65 b = '1.2.2c'; 66 changeVersion(a, b); 67 68 var v_n = '1.2.4', 69 v_o = '1.1.1c'; 70 changeVersion(v_n, v_o); 71 </script> 72 </body> 73 74 </html>