javascript中复杂对象的排序数组

sorting array of complex objects in javascript

本文关键字:排序 数组 对象 复杂 javascript      更新时间:2023-09-26

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

var a = [
 { value: 500, name: 'ccc' },
 { value: 100, name: 'bbb' },
 { value: 500, name: 'aaa' },
 { value: 300, name: 'eee' },
];

我需要按value field的降序排序,如果value field是相等的——然后按字段name的字母顺序对这两个对象排序。

我试着这样做:

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/