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>