[英]Sorting a complex array of objects using a boolean attribute in JavaScript
[英]sorting array of complex objects in javascript
我有一个对象数组,例如:
var a = [
{ value: 500, name: 'ccc' },
{ value: 100, name: 'bbb' },
{ value: 500, name: 'aaa' },
{ value: 300, name: 'eee' },
];
我需要通过降值字段的顺序排序它, 如果 值字段是平等的-然后通过字段名的字母顺序这两个对象进行排序。
我尝试这样的事情:
a.sort(function (a, b) {
return b["value"] - a["value"] || (a["name"] > b["name"]) ? 1: -1;
});
但这不会导致
500,AAA
500,CCC
300,EEE
100,BBB
如我所料
问题是运算符优先级,您需要正确地加上括号。
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"}]
尝试创建一个单独的函数。
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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.