版本号比较函数-js
面试前,让做的一个版本号比较函数。
<script type="text/javascript">
var v1=prompt("请输入第一个版本号");
var v2=prompt("请输入第二个版本号");
console.log(versionCompare(v1,v2));
function versionCompare(v1,v2) {
//版本号间如果出现字母,则视为测试版本,不比较字母大小,字母只出现一次
v1=v1.replace(/\s/g,"");//去除空格
v2=v2.replace(/\s/g,"");
if(v1[0]=="v"||v1[0]=="V"){v1=v1.replace(/v/i,"");}//去除开头的第一个v
if(v2[0]=="v"||v2[0]=="V"){v2=v2.replace(/v/i,"");}
if(v1[0]=="."){v1=v1.replace(/./i,"");}//去除开头的.
if(v2[0]=="."){v2=v2.replace(/./i,"");}
if(v1[v1.length-1]=="."){v1=v1.slice(0,v1.length-1)};//去除末尾的.
if(v2[v2.length-1]=="."){v2=v2.slice(0,v2.length-1)};
console.log(v1+"+"+v2);
var dv1=v1.split(".");//按.分隔开来
var dv2=v2.split(".");
var minlength=Math.min(dv1.length,dv2.length);//获取两者最短字符串长度
var str1,str2,count1,count2;//定义中间变量
console.log(dv1+"-"+dv2);//打印处理后的dv1和dv2
for (i=0;i<minlength;i++) {
count1=-1;
count2=-1;
//版本号有字母的情况
if((dv1[i].search(/[a-zA-Z]+/)!=-1||dv2[i].search(/[a-zA-Z]+/)!=-1)&&i>0){
//对v1进行字母前内容提取
if (dv1[i].search(/[a-zA-Z]+/)!=-1) {
count1=dv1[i].search(/[a-zA-Z]+/);
str1=dv1[i].slice(0,count1);
} else{
str1=dv1[i];
}
//对v2进行字母前内容提取
if (dv2[i].search(/[a-zA-Z]+/)!=-1) {
count2=dv2[i].search(/[a-zA-Z]+/);
str2=dv2[i].slice(0,count1);
} else{
str2=dv2[i];
}
//判断字母前版本号大小
if(parseInt(str1)<parseInt(str2)){return 2;}
else if(parseInt(str1)>parseInt(str2)){return 1;}
else{
if (dv1[i][count1]==dv2[i][count2]) {//字母相同,判断字母后版本大小
str1=dv1[i].slice(count1+1);
str2=dv2[i].slice(count2+1);
return (parseInt(str1)<parseInt(str2)?2:1);}
else{return 0;}//字母不同,属于不同的测试版本
}
}
//版本号无字母的情况
else if(parseInt(dv1[i])<parseInt(dv2[i])){
return 2;}
else if (parseInt(dv1[i])>parseInt(dv2[i])){
return 1;}
}
//在最短字符串长度无比较结果时,谁的长谁的版本号新
if (dv1.length==dv2.length) {
return 0;
}else{
return (dv1.length<dv2.length?2:1);
}
} </script>
还是要从基础学起,数据结构,操作系统,计算机网络,计算机组成原理。
版本号比较函数-js的更多相关文章
- vue cli3.0 build 打包 的 js 文件添加版本号 解决 js 缓存问题
在 vue.config.js 的文件中加入下面这段话 // vue.config.jsconst Timestamp = new Date().getTime();module.exports = ...
- Python版本号比较函数 LooseVersion 和StrictVersion
- 关于更新发布CSS和JS文件的缓存问题
现如今,浏览器大战下,各个浏览器也是拼了命的提高性能,升级JS解析引擎,更好的处理浏览器的页面缓存,让用户的浏览体验更快,占用更小的PC资源.那么,问题就出现在JS和CSS缓存,甚至页面缓存上.至于浏 ...
- js文件被浏览器缓存的思考
我们的用户量大,修改js文件后,用户反馈登录出现问题.实际上刷新一下就没事了.就是因为用户的浏览器使用的还是本地缓存的js代码. 强制刷新一般就会重新去服务器获取新的js代码.但不能让用户 ...
- Node.js学习笔记2(安装和配置Node.js)
1.安装 windows下安装,在http://nodejs.org下载安装包进行安装即可. linux下安装,使用yum或者下载源码进行编译. ...
- JS多语种方式
方案: 在不同的移动平台(IOS.Android)上,并建立了HTML页面通信框架.主要业务逻辑HTML发展:我要支持多语言开发. 动机: 通过积极主动的信息方式,前一页完成初始化,获取当前语言选项. ...
- js判断是否是ie浏览器且给出ie版本
之前懒得写判断ie版本js,因为网上关于这方面的代码太多了,所以从网上拷贝了一个,放到项目上才发现由于时效性的问题,代码不生效.就自己写一个吧. 怎么去看浏览器的内核等信息 ---- js的全局对象w ...
- Node.js入门(含NVM、NPM、NVM的安装)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...
- 利用gulp,当引入文件改动时,版本号自动更新~
gulp自动更新版本号 安装依赖 yarn add gulp-rev yarn add gulp-rev-collector 本次依赖的版本号为: "gulp": "^3 ...
随机推荐
- SQL中去掉字符串中最后一个字符(小技巧)
--长度减一就可以了 select left(字段名,len(字段名)-1) from 表名
- Supervisor: 进程控制系统
Supervisor: 进程控制系统 概述:Supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序. 它与launch ...
- 在visual code的debugger for chrome中调试webpack构建的项目
一直使用chrome中内置的调试器, 感觉世界那么美好, 自从学了react之后,使用visual code作为编辑器, 它提供了很多插件, 其中就包括debugger for chrome, 一款使 ...
- async task 异步消息
async 和 await 是用来定义的异步方法,async 关键字是上下文关键字,原因在于只有当它修饰方法.lambda 表达式或匿名方法时,它才是关键字. 在所有其他上下文中,都会将其解释为标 ...
- https://127.0.0.1:8080/test?param={%22..报错
使用场景:spring boot 1.5.x,内置的tomcat版本为8.5.1 原因: tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 an ...
- 51. linux卸载jdk
看有的资料上说有些Linux自带的有jdk1.4:如果自带的有jdk1.4的话首先要把jdk1.4卸载掉.具体做法: 输入命令: #rpm -qa | grep gcj 如果输出没有内容,说明没有jd ...
- CentOs - 使用ssh key远程登录
环境: 服务器端CentOs,本地OS X 服务器端: 1. 安装openssl使实现ssl协议 2. 将本地的pub key加入信任列表 本地: 1. 生成pub key 2. 配置ssh别名使登陆 ...
- php解析url并得到url中的参数
<?php $url = 'http://www.baidu.com/index.php?m=content&c=index&a=lists&catid=6&ar ...
- DOS系统变量
%ALLUSERSPROFILE% : 列出所有用户Profile文件位置.%APPDATA% : 列出应用程序数据的默认存放位置.%CD% : 列出当前目录.%CLIENTNAME% : 列出联接到 ...
- ActiveMQ无法启动
解决办法:activemq无法启动,端口被占用 用netstat -an无法查出61616被哪个进程占用(实践证明,netstat -ano|findstr '61616'什么也没有找到) 经过排查和 ...