从Javascript中的String获取版本号?

hef*_*ump 6 javascript regex string

我有一个3位数的字符串作为字符串,

var version = "1.2.3";
Run Code Online (Sandbox Code Playgroud)

并希望将它与另一个版本进行比较.要查看版本是否比其他版本更新,

var otherVersion = "1.2.4";
Run Code Online (Sandbox Code Playgroud)

你会怎么做?

jen*_*ram 8

伪:

  • 拆开两个 .
  • 按顺序比较部件:Major - > Minor - > Rev(如果两个版本都存在部件).
  • 如果oV [n]> v [n]:oV最大.
  • 否则:比较下一个子部分.

(有关优雅的实现,请参阅@arhorns的答案)

  • 缺少第二步:将字符串转换为数字,以便“11”排在“2”之后。 (2认同)

arn*_*rhs 6

大多数提交版本的问题是它们无法处理任何数量的版本部分(例如1.4.2 .. 1.2等)和/或它们要求版本部分是单个数字,这不是实际上很常见

改进了compareVersions()函数

如果v1大于v2,则此函数将返回1;如果v2大于此函数,则返回-1;如果版本相同,则此函数将返回0(对于自定义排序也很方便)

我没有对输入进行任何错误检查.

function compareVersions (v1, v2)
{
    v1 = v1.split('.');
    v2 = v2.split('.');
    var longestLength = (v1.length > v2.length) ? v1.length : v2.length;
    for (var i = 0; i < longestLength; i++) {
        if (v1[i] != v2[i]) {
            return (v1 > v2) ? 1 : -1
        }
    }
    return 0; 
 }
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.`var longestLength = Math.max(v1.length,v2.length);` (2认同)

Dan*_*llo 5

您可能希望使用以下实现(基于 jensgram 的解决方案):

function isNewer(a, b) {
   var partsA = a.split('.');
   var partsB = b.split('.');
   var numParts = partsA.length > partsB.length ? partsA.length : partsB.length;
   var i;

   for (i = 0; i < numParts; i++) {
      if ((parseInt(partsB[i], 10) || 0) !== (parseInt(partsA[i], 10) || 0)) {
         return ((parseInt(partsB[i], 10) || 0) > (parseInt(partsA[i], 10) || 0));
      }
   }

   return false;
}

console.log(isNewer('1.2.3', '1.2.4'));    // true
console.log(isNewer('1.2.3', '1.2.0'));    // false
console.log(isNewer('1.2.3', '1.2.3.1'));  // true
console.log(isNewer('1.2.3', '1.2.2.9'));  // false
console.log(isNewer('1.2.3', '1.2.10'));   // true
Run Code Online (Sandbox Code Playgroud)

请注意,必须使用parseInt(),否则最后一次测试将返回false: "10" > "3"returns false

  • `对于每个(我在一个版本中)`?对于数组?为什么? (3认同)