Joe Joe - 6 months ago 9
Javascript Question

How to sort javascript objects based on their properties, specifying the property

There are lots of answers on SO for similar questions, which all describe how to implement a custom sort function to sort an array of javascript objects.

However, I was wondering if it might be possible to implement a more abstract custom sort that would allow me to pass the name of the property of the objects on which I want it to sort. This might save me having to implement very similar functions over and over again.

So if I had an object constructor like:

function Car(mph, cc) {
this.maxSpeed = mph;
this.engineSize = cc;
}


then instead of implementing two sort functions:

function sortCarsOnMaxSpeed(a, b) { return a.maxSpeed - b.maxSpeed; }
function sortCarsOnEngineSize(a, b) { return a.engineSize - b.engineSize; }


I could have some sort of generic function such as:

function sortObjectsOnProperty(a, b, property) {
return a[property] - b[property];
}


but the custom sort seems to only take 2 arguments.

Any suggestions as to how I could do this?

Many thanks.

Answer

You need to write a function that takes a property name and returns a comparator:

function createComparator(property) {
    return function(a, b) {
        return a[property] - b[property];
    };
}

You would use it like this:

arr.sort(createComparator("maxSpeed"));