我有一个数组(数组中的一个对象见下文),我需要使用 JavaScript 按名字排序。我该怎么做?
var user = {
bio: null,
email: "user@domain.com",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
我有一个数组(数组中的一个对象见下文),我需要使用 JavaScript 按名字排序。我该怎么做?
var user = {
bio: null,
email: "user@domain.com",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
假设您有一个数组users
。您可以使用users.sort
并传递一个接受两个参数并比较它们的函数(比较器)
它应该返回
在我们的例子中,如果两个元素是a
并且b
我们想要比较a.firstname
和b.firstname
例子:
users.sort(function(a, b){
if(a.firstname < b.firstname) { return -1; }
if(a.firstname > b.firstname) { return 1; }
return 0;
})
此代码适用于任何类型。
请注意,在“现实生活”™ 中,当您比较字符串时,您经常希望忽略大小写、正确排序变音符号、诸如 ß 之类的奇怪符号等,因此您可能需要使用localeCompare
. 为清楚起见,请参阅其他答案。
使用 ES6 的最短代码!
users.sort((a, b) => a.firstname.localeCompare(b.firstname))
String.prototype.localeCompare()基本支持是通用的!
像这样的东西:
array.sort(function(a, b){
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();
if (nameA < nameB) //sort string ascending
return -1;
if (nameA > nameB)
return 1;
return 0; //default return value (no sorting)
});
如果比较的字符串包含 unicode 字符,您可以使用类的localeCompare
函数,String
如下所示:
users.sort(function(a,b){
return a.firstname.localeCompare(b.firstname);
})
漂亮的小 ES6 单衬:
users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -1 : 1 : 0);