用Javascript中的多个属性对对象数组进行排序 [英] Sort array of objects by multiple properties in Javascript

查看:674
本文介绍了用Javascript中的多个属性对对象数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我整天都在阅读类似的帖子,但无法弄清楚如何按多个属性对我的javascript数组进行排序. 我的数组具有名称"和类型"属性. 现在按名称排序:

I've been reading similar posts all day but can't figure out how to sort my javascript array by multiple properties. My array has a 'name' and 'type' property. To sort by name I now use:

                byNameDesc.sort(function (a, b) {
                    var x = a.name.toLowerCase();
                    var y = b.name.toLowerCase();
                    return y < x ? -1 : y > x ? 1 : 0;
                });

效果很好.我想增强此功能.如果名称"为"foo",则应始终位于最上面.我也想按类型"排序. 因此,"foo"应始终放在最前面,然后按名称"和类型"排序.

Works great. I want to enhance this function. If 'name' is 'foo' it should always be on top. And I also want to sort by 'type'. So 'foo' should always be on top, next sort by 'name' and 'type'.

我尝试过:

                byNameDefault.sort(function (a, b) {
                    if (a.name == 'foo') {
                        return -1;
                    }
                    var x = a.type.toLowerCase();
                    var y = b.type.toLowerCase();
                    return x < y ? -1 : x > y ? 1 : 0;
                });

但这没用.

我不知道如何按名称"和类型"进行排序.

And I have no clue how to sort by 'name' AND 'type'.

非常感谢您的帮助.

推荐答案

对于多个排序条件,请从第一个条件到最后一个条件进行操作: 如果一个条件的两个条目不相等,则可以从排序函数返回结果为-1或1.此外,在最后一个条件下,两个相等的输入也可以返回0.

For multiple sort criteria you proceed from the first to the last criterion: If the two entries for one criterion are not equal, you can return from the sort function with result -1 or 1. Additionally at the last criterion you also can return 0 for two equal inputs.

这是您的案例的示例实现:

Here is an example implementation for your case:

byNameDefault.sort(function (a, b) {
    // compare names
    var na = a.name.toLowerCase();
    var nb = b.name.toLowerCase();

    if (na !== nb) {
        if (na === 'foo')
            return -1;
        else if (nb === 'foo')
            return 1;
        else
            return na < nb ? -1 : 1;
    } 

    // compare types
    return a.type < b.type ? -1 : a.type > b.type ? 1 : 0; 
}

这篇关于用Javascript中的多个属性对对象数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆