docs/docs.js
function compareVersions(versions) {
    // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
    var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
    var chunks = map(versions, function (version) {
      var delta = precision - getVersionPrecision(version);

      // 2) "9" -> "9.0" (for precision = 2)
      version = version + new Array(delta + 1).join(".0");

      // 3) "9.0" -> ["000000000"", "000000009"]
      return map(version.split("."), function (chunk) {
        return new Array(20 - chunk.length).join("0") + chunk;
      }).reverse();
    });

    // iterate in reverse order by reversed chunks array
    while (--precision >= 0) {
      // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
      if (chunks[0][precision] > chunks[1][precision]) {
        return 1;
      }
      else if (chunks[0][precision] === chunks[1][precision]) {
        if (precision === 0) {
          // all version chunks are same
          return 0;
        }
      }
      else {
        return -1;
      }
    }
  }
function compareVersions(versions) {
    // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
    var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
    var chunks = map(versions, function (version) {
      var delta = precision - getVersionPrecision(version);

      // 2) "9" -> "9.0" (for precision = 2)
      version = version + new Array(delta + 1).join(".0");

      // 3) "9.0" -> ["000000000"", "000000009"]
      return map(version.split("."), function (chunk) {
        return new Array(20 - chunk.length).join("0") + chunk;
      }).reverse();
    });

    // iterate in reverse order by reversed chunks array
    while (--precision >= 0) {
      // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
      if (chunks[0][precision] > chunks[1][precision]) {
        return 1;
      }
      else if (chunks[0][precision] === chunks[1][precision]) {
        if (precision === 0) {
          // all version chunks are same
          return 0;
        }
      }
      else {
        return -1;
      }
    }
  }
function compareVersions ( versions ) { // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 var precision = Math . max ( getVersionPrecision ( versions [ 0 ] ) , getVersionPrecision ( versions [ 1 ] ) ) ; var chunks = map ( versions , function ( version ) { var delta = precision - getVersionPrecision ( version ) ; // 2) "9" -> "9.0" (for precision = 2) version = version + new Array ( delta + 1 ) . join ( ".0" ) ; // 3) "9.0" -> ["000000000"", "000000009"] return map ( version . split ( "." ) , function ( chunk ) { return new Array ( 20 - chunk . length ) . join ( "0" ) + chunk ; } ) . reverse ( ) ; } ) ; // iterate in reverse order by reversed chunks array while ( -- precision >= 0 ) { // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) if ( chunks [ 0 ] [ precision ] > chunks [ 1 ] [ precision ] ) { return 1 ; } else if ( chunks [ 0 ] [ precision ] === chunks [ 1 ] [ precision ] ) { if ( precision === 0 ) { // all version chunks are same return 0 ; } } else { return - 1 ; } } }
Calculate browser version weight

@example
compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
compareVersions(['1.10.2.1',  '1.0800.2']);     // -1

@param  {Array<String>} versions versions to compare
@return {Number} comparison result
Calculate browser version weight