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

新手上路,请多包涵

我有一个数组(请参阅下面的数组中的一个对象),我需要使用 JavaScript 按名字排序。

我该怎么做?

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

原文由 Jonathan Clark 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

假设您有一个数组 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;
 })

此代码适用于任何类型。

请注意,在“real life”™ 中,您经常希望在比较字符串时忽略大小写、正确排序变音符号、ß 等奇怪符号等,因此您可能需要使用 localeCompare 。为了清楚起见,请参阅其他答案。

原文由 RiaD 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 ES6 的最短代码!

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

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

原文由 Nachiketha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏