繁体   English   中英

在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"}]

DEMO

尝试创建一个单独的函数。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM