版本号比较如何在JavaScript中正常工作?

时间:2016-01-15 12:21:43

标签: javascript

我可以在JavaScript中正确比较版本号,而无需拆分和检查每个十进制数字。它是如何工作的?

("2.0.1" > "2.1.0")
false

("2.2.1" > "2.1.0")
true

("2.5.1" > "2.0.5")
true

感谢。

4 个答案:

答案 0 :(得分:9)

不,你不能“能够在JavaScript中正确地比较版本号而不必拆分”

"2.2.8" > "2.2.10" // true

这些字符串在字符之后从左到右进行比较。

您需要在数字后拆分和比较数字,这很容易。以下是您可以如何实现它的方法:

function Version(s){
  this.arr = s.split('.').map(Number);
}
Version.prototype.compareTo = function(v){
  for (var i=0; ;i++) {
    if (i>=v.arr.length) return i>=this.arr.length ? 0 : 1;
    if (i>=this.arr.length) return -1;
    var diff = this.arr[i]-v.arr[i]
    if (diff) return diff>0 ? 1 : -1;
  }
}

console.log((new Version("1.1.1")).compareTo(new Version("1.2.1"))); // -1

console.log((new Version("1.1.1")).compareTo(new Version("1.10.1"))); // -1

console.log((new Version("1.10.1.2")).compareTo(new Version("1.10.1"))); // 1

console.log((new Version("1.10.1.2")).compareTo(new Version("1.10.1.2"))); // 0

答案 1 :(得分:4)

因为您按字典顺序比较字符串,这会在示例中产生相同的结果。但是,这并不适用于所有情况,例如当您进入两位数时:2.15.29

答案 2 :(得分:0)

更好的比较方法是创建版本号浮点数,然后创建子版本号,如下所示

subVersion = parseInt(fullVersion.split(".")[2]);
mainVersion = parseFloat(fullOsVer);
转换后,您可以进行比较。这种比较将比较两个整数。

答案 3 :(得分:0)

更简洁,更简洁的解决方案。



0: ABC
1: I am ABC
2: 35
3: DESC
4: 1 23
5: testing
6: 456