最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

sorting - How to sort javascript objects based on their properties, specifying the property - Stack Overflow

programmeradmin1浏览0评论

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.

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.

Share Improve this question asked Sep 18, 2011 at 16:23 JoeJoe 4,92810 gold badges67 silver badges85 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 8

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

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

You would use it like this:

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

sort takes a function, which can be anonymous:

sort(array, function(a, b) { return a.maxSpeed - b.maxSpeed; });

If you really don't want this, you can define a sortObjectsOnProperty() function that return a sort callback like this:

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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论