我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?
var user = {
bio: null,
email: "user@domain.example",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?
var user = {
bio: null,
email: "user@domain.example",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
当前回答
受到这个答案的启发,
users.sort((a,b) => (a.firstname - b.firstname));
其他回答
简单地说,你可以使用这种方法
users.sort(function(a,b){return a.firstname < b.firstname ? -1 : 1});
Underscorejs提供了非常好的_。sortBy功能:
_.sortBy([{a:1},{a:3},{a:2}], "a")
或者你可以使用自定义排序函数:
_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})
使用ES6的最短代码!
users.sort((a, b) => a.firstname.localeCompare(b.firstname))
String.prototype.localeCompare()基本支持是通用的!
我的实现,在旧的ES版本中工作得很好:
sortObject = function(data) {
var keys = Object.keys(data);
var result = {};
keys.sort();
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
result[key] = data[key];
}
return result;
};
受到这个答案的启发,
users.sort((a,b) => (a.firstname - b.firstname));