根据对象的属性之一对对象的 JavaScript 数组进行排序

新手上路,请多包涵

我有一个对象数组,每个对象都有一个属性 name ,一个字符串。我想按此属性对数组进行排序。我希望它们按以下方式排序..

 `ABC`
`abc`
`BAC`
`bac`
etc...

我将如何在 JavaScript 中实现这一点?

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

阅读 235
2 个回答

有两种基本方法:

 var arr = [{name:"ABC"},{name:"BAC"},{name:"abc"},{name:"bac"}];

arr.sort(function(a,b){
  var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
  return alc > blc ? 1 : alc < blc ? -1 : 0;
 });

或者

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

请注意,第二个版本忽略变音符号,因此 aà 将被排序为相同的字母。

现在这两种方式的问题是它们不会在小写字母 abc ABC 之前对大写字母 --- 进行排序,因为它将它们视为相同。

要解决这个问题,您必须这样做:

 arr.sort(function(a,b){
  var alc = a.name.toLowerCase(), blc = b.name.toLowerCase();
  return alc > blc ? 1 : alc < blc ? -1 : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});

同样在这里你可以选择使用 localeCompare 如果你不希望变音符号影响这样的排序:

 arr.sort(function(a,b){
  var lccomp = a.name.toLowerCase().localeCompare(b.name.toLowerCase());
  return lccomp ? lccomp : a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
});

您可以在此处阅读有关排序的更多信息: https ://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

原文由 Martin Jespersen 发布,翻译遵循 CC BY-SA 2.5 许可协议

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