【发布时间】:2012-10-05 16:31:44
【问题描述】:
可能重复:
Sorting objects in an array by a field value in JavaScript
如何按数字(按 id)然后按字母(按名称)对对象数组进行排序?
当前的方式是提供无效的输出。
这是我要排序的对象
var items = [
{
"id": 165,
"name": "a"
},
{
"id": 236,
"name": "c"
},
{
"id": 376,
"name": "b"
},
{
"id": 253,
"name": "f"
},
{
"id": 235,
"name": "e"
},
{
"id": 24,
"name": "d"
},
{
"id": 26,
"name": "d"
}
]
以及我尝试排序的方式
items.sort(function(a, b) {
return (a.id - b.id);
}).sort(function(a, b) {
return (a.name - b.name);
});
这里是 jsfiddle。
编辑:很抱歉造成混乱,我被这个问题困扰了一段时间。
我想要完成的是首先按最高 id 排序,然后按字母顺序排序,所以最后它应该看起来像:
var items = [
{
"id": 376,
"name": "b"
},
{
"id": 253,
"name": "f"
},
{
"id": 236,
"name": "c"
},
{
"id": 235,
"name": "e"
},
{
"id": 165,
"name": "a"
},
{
"id": 26,
"name": "d"
},
{
"id": 24,
"name": "d"
}
]
【问题讨论】:
-
您可能需要一个更好的示例来说明您要完成的工作,因为在此示例中,首先按
id排序没有意义,因为所有ids 和names是独一无二的。相当于只按name排序。 -
同意 - 您希望此处的排序语义到底是什么?
-
不确定您希望通过对列表进行两次排序来实现什么。当您执行
return (a.name - b.name)时,您正试图从另一个字符串中减去一个字符串。不会发生(你可能想要localeCompare。)
标签: javascript jquery arrays sorting