JS实现两版本号大小比较
JavaScript实现版本号比对(含字母)
昨天,有一道面试题,要求是这样的:
用你熟悉的编程语言,实现一个比较任意两个软件版本号大小的函数,如1.2.3a与1.2.4b进行比较,后者版本号更大,要求:不可以使用系统提示的比较函数;
对于一个接触前端开发时间较短的初级前端来说,我还是认真仔细的思考了一下,下边便是我的代码,如有不足之处,望指出!
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>版本号对比</title>
</head>
<body>
<script>
// 获取数字
function toNumber(n) {
var n = n.toString(),
n_arr = n.split(/\D/); // 使用正则表达式,截取字符串为数组,字符串中包含非数值型,如字母,则数组元素中会出现空值
if (n_arr[n_arr.length - 1] == '') {
n_arr.pop();
}
var n_replace = ['', '0', '00', '000', '0000'],
r_n_replace = n_replace.reverse();
for (var i = 0; i < n_arr.length; i++) {
var l = n_arr[i].length;
n_arr[i] = r_n_replace[l] + n_arr[i];
}
var res = n_arr.join('');
return res;
}
// 获取字母
function toString(s) {
var s = s.toString(),
reg = s.match(/[a-zA-Z]/g); // 截取字符串中的字母成为数组元素
if (reg != null) {
return reg;
} else {
return null;
}
}
// 版本对比
function changeVersion(a, b) {
var a1 = toNumber(a),
a2 = toString(a),
b1 = toNumber(b),
b2 = toString(b);
if (a1 < b1) {
console.log('最新版本号为:' + b);
} else if (a1 > b1) {
console.log('最新版本号为:' + a);
} else if (a1 === b1) {
// 版本号相同时,对比字母,将其转为16进制数,进行比对
var a2_str = a2[0].toString(16),
b2_str = b2[0].toString(16);
if (a2_str < b2_str) {
console.log('最新版本号为:' + b);
} else if (a2_str > b2_str) {
console.log('最新版本号为:' + a);
} else if (a2_str === b2_str) {
console.log('两版本号相同!最新版本号为:' + a);
}
}
}
var a = '1.2.3a',
b = '1.2.2c';
changeVersion(a, b);
var v_n = '1.2.4',
v_o = '1.1.1c';
changeVersion(v_n, v_o);
</script>
</body>
</html>
JS实现两版本号大小比较的更多相关文章
- JS比较两个数字大小
js不能直降比较两·个数大小,要先转化为整数再比较大小. parseInt()转化. 出处:http://www.jb51.net/article/98251.htm
- 小议 js 下字符串比较大小
原文:小议 js 下字符串比较大小 之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2 ...
- js实现软件版本号的比较
//js实现软件版本号的比较 //随机举两个例子 pc2.4.3 或者pc3.5.6 /** * 输入 v1,v2 * 返回true代表v1比v2的版本新,false则代表v1与v2相等或者v1< ...
- JS比较软件版本号
JS比较软件版本号 版本号格式为:a.b.c 1.获取版本号中的数字 function toNumber(n) { // 使用正则表达式,截取字符串为数组,字符串中包含非数值型,如字母,则数组元素中会 ...
- JS中有两种自加法操作
JS中有两种自加法操作.它们的运算符是++,它们的函数是向1添加运算符. 我和我的区别在于操作的顺序和组合的方向. 其中:++var被称为预自动添加,变量执行自动添加操作后.它的操作是先执行自动加法操 ...
- C# 如何比较版本号大小
最近遇到了一个数据迁移的问题,因为配置文件的结构发生变化,所以要把低版本的用户数据保存下来,存到最新版本中去. 这里就有一个比较版本号大小的问题了,网上乱七八糟算法一堆,大致意思就是用分割字符串的方法 ...
- js保留两位小数
js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入 保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...
- (转)JS获取当前对象大小以及屏幕分辨率等
原文 JS获取当前对象大小以及屏幕分辨率等 <script type="text/javascript">function getInfo(){ var ...
- JS获取当前对象大小以及屏幕分辨率等...
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta nam ...
随机推荐
- 用script标签加载
此文已由作者杨帆授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:经过更深入的测试,实在不好意思,这篇文章是有问题的 更改script的type属性 并不能通过src来加载 ...
- 蒟蒻ACMer回忆录 · 一段弱校ACM的奋斗史
三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史. 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌 ...
- loj#2540. 「PKUWC2018」随机算法
传送门 完了pkuwc咋全是dp怕是要爆零了-- 设\(f(S)\)表示\(S\)的排列数,\(S\)为不能再选的点集(也就是选到独立集里的点和与他们相邻的点),\(mx(S)\)表示\(S\)状态下 ...
- Linux系统配置文件
ubuntu系统: ~/.bashrc:该文件保存终端的文本,颜色等各类设置 ~/.bash_history:保存用户运行过的命令 ~:表示home目录 /etc/matb:该文件保存所有挂载分区的文 ...
- EditPlus 3:设置自动换行
打开软件,菜单栏点击Document,再在下拉栏中点击Permanent Settings,然后在弹出的设置框中找到Word Wrap点击,最后在弹出的小框中勾选第一个Enable word wrap ...
- 今天发现一个汉字转换成拼音的模块,记录一下,直接pip install xpinyin即可
http://blog.csdn.net/qq_33232071/article/details/50915760
- 481 Magical String 魔力字符串
详见:https://leetcode.com/problems/magical-string/description/ C++: 方法一: class Solution { public: int ...
- Linux下用matplotlib画决策树
1.trees = {'no surfacing': { 0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} 2.从我的文件trees.txt里读的决策树, ...
- 生成HTML表格的后台模板代码
有时候,我们需要在后台拼接生成前端的html表格,一般的做法就是各种string.StringBuilder的拼接(例子省略...),这样的话如果表头不同就没法做到代码的重用,增加代码的冗余,下面我分 ...
- iOS 使用UIBezierPath和CAShapeLayer画各种图形
CAShapeLayer 是 CALayer 的子类,但是比 CALayer 更灵活,可以画出各种图形,当然,你也可以使用其他方式来画,随你. 杂谈 在 CAShapeLayer 中,也可以像 CAL ...