Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort multidimensional array in javascript

I have an array as follows

var arry = [ [1, "Convention Hall", "Mumbai", 10, "XYZ Company"], 
             [2, "Auditorium", "Delhi", 10, "ABC Company"], 
             [3, "CenterHall", "Bangalore", 10, "ZZZ Company"],
            ....
            ]

I want to sort the array alphabetically based on the third item of array i.e arry[n][2]

How to do this.

like image 416
n92 Avatar asked Dec 19 '22 19:12

n92


2 Answers

http://jsfiddle.net/VPrAr/

enter image description here

You can use the arry.sort(). The default is alphanumeric and ascending.

So it would be:

var arry = [ [1, "Convention Hall", "Dangalore", 10, "XYZ Company"], 
             [2, "Auditorium", "Belhi", 10, "ABC Company"], 
             [3, "CenterHall", "Aumbai", 10, "ZZZ Company"],
            ];
var x =arry.sort(function(a,b){ return a[2] > b[2] ? 1 : -1; });
alert(x);
like image 136
Ali Gajani Avatar answered Jan 05 '23 15:01

Ali Gajani


Array.prototype.sort function expects a function as a parameter, which accepts two parameters and returns any of -1, 0 or 1.

I am a very big fan of functional programming, so I came up with this. This offers flexibility.

  1. You can sort based on any element
  2. You can even reverse the order of sorting
  3. You can customize, how the objects have to be compared.

function basicComparator(first, second) {
    if (first === second) {
        return 0;
    } else if (first < second) {
        return -1;
    } else {
        return 1;
    }
}

function compareNthElements(n, comparatorFunction, reverse) {
    return function(first, second) {
        if (reverse === true) {
            return comparatorFunction(second[n], first[n]);
        } else {
            return comparatorFunction(first[n], second[n]);
        }
    }
}

Thats it. Now, call the sort function like this

arry.sort(compareNthElements(1, basicComparator, true));  // Sorts first field and in reverse
arry.sort(compareNthElements(2, basicComparator));        // Sorts second field
like image 20
thefourtheye Avatar answered Jan 05 '23 17:01

thefourtheye