重写h5+在线升级版本比较代码
hello h5+版本在线升级提供了如下的版本比较方法,逻辑比较繁琐,相关判断多余,非常不宜读。
先判断新旧版本有无,
接着分割为数组比较数组项大小,而且还只取了前四项
并且在内部再去比较数组长度,
最后重新在比较一次数组长度
四层逻辑还有一层嵌套,完全没必要
http://www.cnblogs.com/phillyx/
/**
* 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
* @param {String} ov
* @param {String} nv
* @return {Boolean}
*/
var compareVersion = function(ov, nv) {
if (!ov || !nv || ov == "" || nv == "") {
return false;
}
var b = false,
ova = ov.split(".", 4),
nva = nv.split(".", 4);
for (var i = 0; i < ova.length && i < nva.length; i++) {
var so = ova[i],
no = parseInt(so),
sn = nva[i],
nn = parseInt(sn);
if (nn > no || sn.length > so.length) {
return true;
} else if (nn < no) {
return false;
}
}
if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
return true;
}
};
下面是重写的方法
首先将版本转化为字符串
然后分割为数组,并去最大的数组长度
比较数组,数组中无此项的置0
这样就可以了,代码量明显减少,逻辑也比较清晰
/**
* 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
* @param {String} ov
* @param {String} nv
* @return {Boolean}
*/
var compareVersion = function(ov, nv) {
ov=ov+'';
nv=nv+'';
var ova = ov.split("."),
nva = nv.split(".");
var maxLength = Math.max(ova.length, nva.length);
for (var i = 0; i < maxLength; i++) {
var so = +ova[i] || 0,
sn = +nva[i] || 0;
if (sn > so) {
return true;
}
if(sn < so){
return false
}
}
return false;
};