Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中按多个属性对对象数组排序_Javascript_Arrays_Sorting - Fatal编程技术网

在Javascript中按多个属性对对象数组排序

在Javascript中按多个属性对对象数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我整天都在读类似的文章,但不知道如何按多个属性对javascript数组进行排序。 我的数组具有“name”和“type”属性。 要按名称排序,我现在使用: byNameDesc.sort(function (a, b) { var x = a.name.toLowerCase(); var y = b.name.toLowerCase(); r

我整天都在读类似的文章,但不知道如何按多个属性对javascript数组进行排序。 我的数组具有“name”和“type”属性。 要按名称排序,我现在使用:

                byNameDesc.sort(function (a, b) {
                    var x = a.name.toLowerCase();
                    var y = b.name.toLowerCase();
                    return y < x ? -1 : y > x ? 1 : 0;
                });
byNameDesc.sort(函数(a,b){
var x=a.name.toLowerCase();
var y=b.name.toLowerCase();
返回yx-1:0;
});
效果很好。我想增强这个功能。如果“name”是“foo”,它应该始终位于顶部。我还想按“类型”排序。 所以“foo”应该总是在最上面,接下来按“name”和“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;
                });
bynamefault.sort(函数(a,b){
如果(a.name='foo'){
返回-1;
}
var x=a.type.toLowerCase();
var y=b.type.toLowerCase();
返回xy-1:0;
});
但那没用

我不知道如何按“名称”和“类型”排序


非常感谢您的帮助。

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

以下是您案例的实施示例:

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; 
}
bynamefault.sort(函数(a,b){
//比较姓名
var na=a.name.toLowerCase();
var nb=b.name.toLowerCase();
如果(na!==nb){
如果(na=='foo')
返回-1;
否则如果(nb==='foo')
返回1;
其他的
返回nab.type-1:0;
}

谢谢你的回答和解释。我现在明白我在做什么了;)