Search code examples
javascriptalgorithmsorting

How do you sort an array on multiple columns?


I have a multidimensional array. The primary array is an array of

[publicationID][publication_name][ownderID][owner_name] 

What I am trying to do is sort the array by owner_name and then by publication_name. I know in JavaScript you have Array.sort(), into which you can put a custom function, in my case i have:

function mysortfunction(a, b) {
    var x = a[3].toLowerCase();
    var y = b[3].toLowerCase();

    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

This is fine for just sorting on the one column, namely owner_name, but how do I modify it to sort on owner_name, then publication_name?


Solution

  • If owner names differ, sort by them. Otherwise, use publication name for tiebreaker.

    function mysortfunction(a, b) {
    
      var o1 = a[3].toLowerCase();
      var o2 = b[3].toLowerCase();
    
      var p1 = a[1].toLowerCase();
      var p2 = b[1].toLowerCase();
    
      if (o1 < o2) return -1;
      if (o1 > o2) return 1;
      if (p1 < p2) return -1;
      if (p1 > p2) return 1;
      return 0;
    }