在Javascript中按多个属性对对象数组排序
我整天都在读类似的文章,但不知道如何按多个属性对javascript数组进行排序。 我的数组具有“name”和“type”属性。 要按名称排序,我现在使用:在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
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;
}
谢谢你的回答和解释。我现在明白我在做什么了;)