Den*_*nez 27 javascript arrays sorting jquery
如何按字母顺序(按名称)按字母顺序(按名称)对对象数组进行排序?
目前的方式是提供无效输出.
这是我试图整理的对象
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"
}
]
Run Code Online (Sandbox Code Playgroud)
以及我试图排序的方式
items.sort(function(a, b) {
return (a.id - b.id);
}).sort(function(a, b) {
return (a.name - b.name);
});
Run Code Online (Sandbox Code Playgroud)
这是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"
}
]
Run Code Online (Sandbox Code Playgroud)
rai*_*7ow 49
我认为最好只用......
items.sort(function(a, b) {
return a.id - b.id || a.name.localeCompare(b.name);
});
Run Code Online (Sandbox Code Playgroud)
第二种基本上会否定第一种,所以你必须做一次.)
a.id - b.id || a.name.localeCompare(b.name)表达将首先比较ids; 只有它们相等,它才会比较名称(并返回此比较的结果).
如果你需要颠倒顺序,交换位置(b.id - a.id等等) - 或者只是否定整个事情:
items.sort(function(a, b) {
return - ( a.id - b.id || a.name.localeCompare(b.name) );
});
Run Code Online (Sandbox Code Playgroud)
这是JSFiddle(必须简化数据以显示我的观点).
如果你的意思是你希望它们排序id,如果id匹配,你希望它们排序,name然后使用这个:
items.sort(function(a, b) {
if (a.id !== b.id) {
return a.id - b.id
}
if (a.name === b.name) {
return 0;
}
return a.name > b.name ? 1 : -1;
});
Run Code Online (Sandbox Code Playgroud)
否则你的问题不清楚.
创建一个常规函数以对其进行排序。检查下面的dynamicSort函数
var items = [
{
"id": 165,
"name": "a"},
{
"id": 236,
"name": "b"},
{
"id": 376,
"name": "c"},
{
"id": 253,
"name": "d"},
{
"id": 235,
"name": "e"},
{
"id": 24,
"name": "f"}
];
function dynamicSort(property) {
return function(a, b) {
return (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
}
}
items.sort(dynamicSort('name')).sort(dynamicSort('id'));
console.log(items);
items.sort(dynamicSort('id')).sort(dynamicSort('name'));
console.log(items);
Run Code Online (Sandbox Code Playgroud)