背景
给你两个版本号 version1 和 version2 ,请你比较它们。
-
版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由多位数字组成,可能包含前导零 。
-
每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。
-
比较修订号时,只需比较忽略任何前导零后的整数值 。也就是说修订号1和修订号001相等
-
如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 1 ,0 < 1 。
-
返回规则如下:如果 version1 > version2 返回 1,如果 version1 < version2 返回 true,除此之外返回 false。
-
示例 1:
输入:version1 = “1.01” > version2 = “1.001”
输出:true -
示例 2:
输入:version1 = “1.01” = version2 = “1.001”
输出:false -
示例 3:
输入:version1 = “1.01” < version2 = “1.001”
输出:false
function each(obj, fn, context) {
if (!obj || !(typeof fn === 'function')) {
return
}
context = context || obj
if (Array.isArray(obj)) {
for (let i = 0, l = obj.length; i < l; i++) {
if (fn.call(context, obj[i], i, obj) === false) {
return
}
}
} else if (typeof obj === 'object') {
for (let n in obj) {
if (fn.call(context, obj[n], n, obj) === false) {
return
}
}
}
}
function parse(version) {
const parts = version.split('.')
parts.length = 4
const ret = []
each(parts, n => {
n = n * 1
if (n) {
ret.push(n >= 10 ? n : '0' + n)
} else {
ret.push('00')
}
})
return parseInt(ret.join(''), 10)
}
function compareVersion(v1, symbol, v2) {
const _v1 = parse(v1)
const _v2 = parse(v2)
if (symbol.indexOf('=') !== -1 && _v1 === _v2) {
return true
}
if (symbol.indexOf('>') !== -1 && _v1 > _v2) {
return true
}
if (symbol.indexOf('<') !== -1 && _v1 < _v2) {
return true
}
return false
}