根据嵌套值按字典顺序对对象数组进行排序

新手上路,请多包涵

使用 JavaScript,我想知道如何根据每个对象中的字符串值按字典顺序对对象数组进行排序。

考虑:

 [
 {
    "name" : "bob",
    "count" : true
    "birthday" : 1972
 },
      {
    "name" : "jill",
    "count" : false
    "birthday" : 1922
 },
      {
    "name" : "Gerald",
    "count" : true
    "birthday" : 1920
 }
 ]

如何按名称的字母顺序对数组进行排序?

名称值是用户名,所以我想保留字母大小写。

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

阅读 420
2 个回答
var obj = [...];

obj.sort(function(a,b){return a.name.localeCompare(b.name); });

请注意,这不会考虑大写(因此它会将所有以大写字母开头的名称排在所有以小写字母开头的名称之前,即 "Z" < "a" ),因此您可能会发现添加一个 toUpperCase() 在那里。

您也可以使其更通用:

 function sortFactory(prop) {
   return function(a,b){ return a[prop].localeCompare(b[prop]); };
}

obj.sort(sortFactory('name')); // sort by name property
obj.sort(sortFactory('surname')); // sort by surname property

如果您将比较器传递给工厂,甚至更通用……

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

这将做到:

 arr.sort(function(a, b) {
    return a.name.localeCompare(b.name);
});

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

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