通过Javascript中的多个属性对对象数组排序
问题描述:
我一整天都在阅读类似的帖子,但无法弄清楚如何通过多个属性对我的javascript数组进行排序。 我的数组有'名称'和'类型'属性。 按名称排序我现在用:通过Javascript中的多个属性对对象数组排序
byNameDesc.sort(function (a, b) {
var x = a.name.toLowerCase();
var y = b.name.toLowerCase();
return y < x ? -1 : y > x ? 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;
});
但没有奏效。
我不知道如何按'名称'和'类型'进行排序。
任何帮助,非常感谢。
答
对于多个排序标准,您可以从第一个标准到最后一个标准: 如果一个标准的两个条目不相等,则可以使用结果-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;
}
谢谢您的回答和解释。我现在明白我在做什么;) –