1.0.0 • Published 9 years ago

lex-compare v1.0.0

Weekly downloads
4
License
MIT
Repository
github
Last release
9 years ago

lex-compare

NPM version Build Status Dependency Status Coverage percentage Code Climate

Implements lexicographical comparison.

Install

$ npm install --save lex-compare

Usage

'use strict';

// You need to call lexCompare to get a comparator. It takes an element
// comparator as an optional argument.
var lexCompare = require('lex-compare')();

var superArray = [
  [1, 20, 3],
  [1, 3, 7],
  [5, 7, 8]
];

console.log(superArray.sort(lexCompare));
// [ [1,  3, 7],
//   [1, 20, 3],
//   [5,  7, 8] ]
'use strict';

// Takes arrays of strings and compares them lexicographically by the position
// of 't' in each string.
var tPosLexComparator = require('lex-compare')(function(a, b) {
  var aPos = a.indexOf('t');
  var bPos = b.indexOf('t');
  
  return (aPos < bPos ? -1 : aPos > bPos ? 1 : 0);
});

console.log(
  // -1 because [0] < [3]
  tPosLexComparator(['tetris'], ['flute']),
  
  // 1 because [0, 1] > [0, 0]
  tPosLexComparator(['tetris', 'strobe'], ['trail', 'top'])
);
'use strict';

var assert = require('assert');
var lexCompare = require('lex-compare');

var compareVersions = (function() {
  var lc = lexCompare();
  var regex = /^[0-9]+.[0-9]+.[0-9]+$/;
  
  return function(vA, vB) {
    assert(regex.test(vA) && regex.test(vB));
    
    return lc(
      vA.split('.').map(Number),
      vB.split('.').map(Number)
    );
  };
})();

console.log(
  compareVersions('1.0.0', '1.1.1'), // -1
  compareVersions('1.20.0', '1.7.0') // 1
);

License

MIT © Andrew Morris