我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?

var user = {
   bio: null,
   email:  "user@domain.example",
   firstname: "Anna",
   id: 318,
   lastAvatar: null,
   lastMessage: null,
   lastname: "Nickson",
   nickname: "anny"
};

当前回答

我的实现,在旧的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));

我的实现,在旧的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;
};

如果比较的字符串包含unicode字符,您可以使用String类的localeCompare函数,如下所示:

users.sort(function(a,b){
    return a.firstname.localeCompare(b.firstname);
})

你可以使用类似的方法来消除区分大小写的问题

users.sort(function(a, b){

  //compare two values
  if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
  if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
  return 0;

})

使用ES6的最短代码!

users.sort((a, b) => a.firstname.localeCompare(b.firstname))

String.prototype.localeCompare()基本支持是通用的!