Joe Joe - 2 years ago 60
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 Source

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:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download