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

Ski*_*zit 22 javascript

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

`ABC`
`abc`
`BAC`
`bac`
etc...
Run Code Online (Sandbox Code Playgroud)

我如何在JavaScript中实现这一目标?

Mar*_*sen 47

有两种基本方法:

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;
 });
Run Code Online (Sandbox Code Playgroud)

要么

arr.sort(function(a,b){
  return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
 });
Run Code Online (Sandbox Code Playgroud)

请注意,第二个版本忽略变音符号,所以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;
});
Run Code Online (Sandbox Code Playgroud)

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;
});
Run Code Online (Sandbox Code Playgroud)

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