我有一个对象数组,例如:
var a = [
{ value: 500, name: 'ccc' },
{ value: 100, name: 'bbb' },
{ value: 500, name: 'aaa' },
{ value: 300, name: 'eee' },
];
我需要按值字段的降序排序, AND 如果值字段等于 - 则对这两个对象进行排序按字母顺序排列名称。
我尝试这样的事情:
a.sort(function (a, b) {
return b["value"] - a["value"] || (a["name"] > b["name"]) ? 1: -1;
});
但这不会导致
500,AAA
500,CCC
300,EEE
100,bbb
正如我所料
答案 0 :(得分:6)
问题是运算符优先级,你需要正确地加上括号。
a.sort(function (a, b) {
return (b["value"] - a["value"]) || ((a["name"] > b["name"]) ? 1: -1);
});
逻辑运算符的优先级高于三元运算符,因此需要将三元表达式括在括号中。我已经添加了额外的冗余括号,以使一切都清楚。
测试结果:
[{"value":500,"name":"aaa"},
{"value":500,"name":"ccc"},
{"value":300,"name":"eee"},
{"value":100,"name":"bbb"}]
答案 1 :(得分:-2)
尝试创建一个单独的函数。
function compare(a,b) {
if (a.value< b.value)
return -1;
if (a.value> b.value)
return 1;
if(a.value == b.value)
if (a.name< b.name)
return -1;
if (a.name> b.name)
return 1;
return 0;
}
a.sort(compare);
以下是工作示例:http://jsfiddle.net/8ZUdF/