Yesterday I posted about using jQuery to sort child elements via some field value. Today I had to go back to an even more basic question: a tidier way of sorting an array of hashes by the hash values for some particular key:
Javascript has a built in .sort() function for its arrays. (It tends to sort in place, so if you have something like
var x = [2,1,3];
var y = x.sort();
then both x and y are sorted.)
You can pass sort() a function(a,b) that should return -1, 0, or 1 based on whether a comes before or after b.
Other languages have a strcmp() function that returns those values for two strings, but in javascript you have to roll your own: (via http://phpjs.org/functions/strcmp/ )
function strcmp (str1, str2) {
  // http://kevin.vanzonneveld.net
  // +   original by: Waldo Malqui Silva
  // +      input by: Steve Hilder
  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +    revised by: gorthaur
  // *     example 1: strcmp( 'waldo', 'owald' );
  // *     returns 1: 1
  // *     example 2: strcmp( 'owald', 'waldo' );
  // *     returns 2: -1
  return ((str1 == str2) ? 0 : ((str1 > str2) ? 1 : -1)); 
}
or for shorter, 
function strcmp (str1, str2) {  
   return ((str1 == str2) ? 0 : ((str1 > str2) ? 1 : -1)); 
}
so if you had an array of maps called users, and each map had a value for the key "name", the sort might look like
users.sort(function(a,b){ 
   return strcmp(a.name.toUpperCase(),b.name.toUpperCase());  
} );
 
 
No comments:
Post a Comment