javascript - Sort array on key value -


i have function sorts name , array of value / key pairs.

i wonder how can pass key on sort being performed can call same function every time so:

var arr = [{name:'bob', artist:'rudy'},            {name:'johhny', artist:'drusko'},            {name:'tiff', artist:'needell'},            {name:'top', artist:'gear'}];  sort(arr, 'name');   //trying sort name sort(arr, 'artist'); //trying sort artist  function sort(arr) {   arr.sort(function(a, b) {     var namea=a.name.tolowercase(), nameb=b.name.tolowercase();     if (namea < nameb) //sort string ascending       return -1;     if (namea > nameb)       return 1;     return 0; //default return value (no sorting)    });           } 

here 2 sorting functions may useful:

// sort on values function srt(desc) {   return function(a,b){    return desc ? ~~(a < b) : ~~(a > b);   }; }  // sort on key values function keysrt(key,desc) {   return function(a,b){    return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);   } } 

for array can sort on 'name' using:

var arr = [ {name:'bob', artist:'rudy'}            ,{name:'johhny', artist:'drusko'}            ,{name:'tiff', artist:'needell'}            ,{name:'top', artist:'gear'}]           .sort(keysrt('name')); 

you combine sorting functions:

function srt(desc,key) {  return function(a,b){    return desc ? ~~(key ? a[key]<b[key] : < b)                 : ~~(key ? a[key] > b[key] : > b);   }; } 

and use

var arr = [ {name:'bob', artist:'rudy'}                ,{name:'johhny', artist:'drusko'}                ,{name:'tiff', artist:'needell'}                ,{name:'top', artist:'gear'}]               .sort(srt(null,'name')); 

here's kind of in 1 solution:

function srt(on,descending) {  on = on && on.constructor === object ? on : {};  return function(a,b){    if (on.string || on.key) {      = on.key ? a[on.key] : a;      = on.string ? string(a).tolowercase() : a;      b = on.key ? b[on.key] : b;      b = on.string ? string(b).tolowercase() : b;      // if key not present, move end       if (on.key && (!b || !a)) {       return !a && !b ? 1 : !a ? 1 : -1;      }    }    return descending ? ~~(on.string ? b.localecompare(a) : < b)                      : ~~(on.string ? a.localecompare(b) : > b);   }; } // usage examples 'a,z,x,y,a,b,b,z,a,i,j,y'.split(',').sort( srt({string:true;}) );  //=> ,a,a,b,b,i,j,x,y,y,z,z [100,7,8,2,2,0,5,1,6,5,-1].sort( srt() );  //=> -1,0,1,2,2,5,5,6,7,8,100 [100,7,8,2,2,0,5,1,6,5,-1].sort( srt({},true}) );  //=> 100,8,7,6,5,5,2,2,1,0,-1 var objarr =   [ {name:'bob', artist:'rudy'}   ,{name:'johhny', artist:'drusko'}   ,{name:'tiff', artist:'needell'}   ,{name:'top', artist:'gear'}]  .sort( srt({key:'name',string:true}, true) ); (var i=0;i<objarr.length;i+=1) {   console.log(objarr[i].name); } //=> logs zeb, top, tiff, johnny consecutively 

Comments

Popular posts from this blog

.htaccess - First slash is removed after domain when entering a webpage in the browser -

Automatically create pages in phpfox -

c# - Farseer ContactListener is not working -