协慌网

登录 贡献 社区

在 Javascript 中按名字(按字母顺序)对数组进行排序

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

var user = {
   bio: null,
   email:  "[email protected]",
   firstname: "Anna",
   id: 318,
   lastAvatar: null,
   lastMessage: null,
   lastname: "Nickson",
   nickname: "anny"
};

答案

假设您有一个数组users 。您可以使用users.sort并传递一个接受两个参数并比较它们的函数(比较器)

它应该返回

  • 如果第一个参数小于第二个参数,则为负数(应在结果数组的第二个参数之前放置)
  • 如果第一个参数较大,则为正数(应放在第二个参数之后)
  • 如果这两个元素相等,则为 0。

在我们的例子中,如果两个元素是ab我们要比较a.firstnameb.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)
});