Comparator functions for your favorite sort-algo
npm install compare.js
var mergesort = require('divide-et-impera');
var compare = require('compare.js');
var desc = compare.desc;
var caseInsensitive = compare.caseInsensitive;
// or require only what you need
var desc = require('compare.js/desc');
var caseInsensitive = require('compare.js/caseInsensitive');
// Basic usage
mergesort([3, 1, 2, 4, 2], desc()); // => [4, 3, 2, 2, 1]
mergesort(['a', 'c', 'C', 'B', 'b'], caseInsensitive()); // => ['a', 'B', 'b', 'c', 'C']
mergesort(['a', 'c', 'C', 'B', 'b'], desc(caseInsensitive())); // => ['B', 'b', 'c', 'C', 'a']
mergesort(['a', 'c', 'C', 'B', 'b'], desc(caseInsensitive())); // => ['B', 'b', 'c', 'C', 'a']
// Compose a sort function
var compose = require('compose-function');
var curry = require('chickencurry');
var sortDescByName = curry(mergesort)
(curry.__, compose(
caseInsensitive,
curry(property)('name'),
desc
)()
);
var users = [{
name: 'Bylexus'
}, {
name: 'Ai-Linh'
}, {
name: 'Schtoeffel'
}];
sortDescByName(users);
/* => [{
name: 'Schtoeffel'
}, {
name: 'Bylexus'
}, {
name: 'Ai-Linh'
}]
Simply checks if a
is smaller then b
simple()(1, 2); // => -1
simple()(1, 1); // => 0
simple()(2, 1); // => 1
mergesort(list, simple());
Checks dates using moment.js.
date()(new Date('2015', '02', '1'), new Date('2015', '01', '31')); // => -1
date()(new Date('2015', '02', '1'), new Date('2015', '02', '1')); // => 0
date()(new Date('2015', '01', '31'), new Date('2015', '02', '1')); // => 1
date('DD.MM.YYYY')('18.01.1986', '19.01.1986'); // => -1
date('DD.MM.YYYY')('18.01.1986', '18.01.1986'); // => 0
date('DD.MM.YYYY')('18.01.1986', '17.01.1986'); // => 1
mergesort(list, date('DD.MM.YYYY'));
Inverts a comparator.
desc(simple())(1, 2); // => 1
desc(simple())(1, 1); // => 0
desc(simple())(2, 1); // => -1
mergesort(list, desc(date()));
Compares a property of two objects.
var foo = {
name: 'foo'
};
var bar = {
name: 'bar'
};
property('name')(foo, bar); // => 1
property('name')(foo, foo); // => 0
property('name')(bar, foo); // => -1
// this works
property('name', caseInsensitive())
// this doesn't
caseInsensitive(property('name'))
mergesort(list, property('name'));
Compares a property of two objects.
caseInsensitive()('a', 'A'); // => 0
caseInsensitive()('A', 'a'); // => 0
mergesort(list, property('name', caseInsensitive()));