在javascript中排序复杂对象的数组

时间:2014-06-13 11:56:33

标签: javascript

我有一个对象数组,例如:

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

正如我所料

2 个答案:

答案 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"}]

DEMO

答案 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/