Skip to content

Instantly share code, notes, and snippets.

@scott-joe
Last active December 19, 2015 06:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scott-joe/5909927 to your computer and use it in GitHub Desktop.
Save scott-joe/5909927 to your computer and use it in GitHub Desktop.
Sorts an array based on a property. Reversible.
//Based on http://jsfiddle.net/dFNva/1/
var events = [
{
event_name: "Recurring",
start_date_time: new Date('Fri May 17 2013 01:00:00 GMT-0400 (EDT)'),
rating: '4.1'
}, {
event_name: "Morning Dive",
start_date_time: new Date('Tue May 14 2013 02:00:00 GMT-0400 (EDT)'),
rating: '1.0'
}, {
event_name: "Beginner's Course",
start_date_time: new Date('Mon May 13 2013 08:30:00 GMT-0400 (EDT)'),
rating: '2.2'
}, {
event_name: "Morning Dive",
start_date_time: new Date('Mon May 13 2013 08:30:00 GMT-0400 (EDT)'),
rating: '3.5'
}, {
event_name: "Morning Dive 2",
start_date_time: new Date('Tue May 14 2013 02:00:00 GMT-0400 (EDT)'),
rating: '4.0'
}, {
event_name: "Fizzlepop 5",
start_date_time: new Date('Fri May 17 2013 01:00:00 GMT-0400 (EDT)'),
rating: '5.0'
}
];
var sort_by = function(field, reverse, primer){
var key = function (x) {return primer ? primer(x[field]) : x[field]};
return function (a,b) {
var A = key(a), B = key(b);
return ( (A < B) ? -1 : ((A > B) ? 1 : 0) ) * [-1,1][+!!reverse];
}
}
console.log('Sort by Name');
events.sort(sort_by('event_name', true, function(a){return a.toUpperCase()}));
for (i=0; i<events.length; i++) {
console.log(events[i].event_name, events[i].start_date_time, events[i].rating);
}
console.log('Sort by Date');
events.sort(sort_by('start_date_time', true, function(a){ return a }));
for (i=0; i<events.length; i++) {
console.log(events[i].start_date_time, events[i].event_name, events[i].rating);
}
console.log('Sort by Rating');
events.sort(sort_by('rating', true, parseFloat));
for (i=0; i<events.length; i++) {
console.log(events[i].rating, events[i].start_date_time, events[i].event_name);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment