0

如果我有一个对象数组 Array 1:[Object 1, Object 2, Object 3]并且每个对象如下所示:

object 1 has properties : creation date, name, class, size where name = Bear
object 2 has properties : creation date, name, class, size where name = Dog
object 3 has properties : creation date, name, class, size where name = Guerilla

我想根据它们各自的名称按字母顺序对这些对象进行排序,因此数组 2如下所示[Object 1 (Bear), Object 2 (Dog), Object 3 (Guerilla)]

我将如何在 Javascript 中解决这个问题?有没有方便的方法来做到这一点?我对 JS 比较陌生。先感谢您!

4

5 回答 5

1

sort 方法与自定义比较器一起使用:

Array1.sort(function(x, y){
  var n1 = x.name;
  var n2 = y.name;
  return n1 == n2 ? 0
    : n1 < n2 ? -1
    : 1;
});
于 2012-10-06T20:57:50.780 回答
1
arr.sort(function (a, b) {
  return a.localeCompare(b);
});

请注意,这sort是一个就地排序,因此您的原始数组将被排序。

于 2012-10-06T21:01:40.057 回答
1

javascript sort 方法接受一个匿名比较函数,它为您提供了对任何属性的对象进行排序所需的所有灵活性。

一般模式是:

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

提供给 sort 方法的“匿名”函数接受两个对象进行比较,并应返回一个值,指示哪个元素排序更高,如下所示:

如果 a 的排序高于 b,则返回 1
如果 a 的排序低于 b,则返回 -1
如果 a 等价于 b(用于排序目的),则返回 0

这是一个示例(省略号表示其他属性):

var beasties = [
  {name:'Bear', created_at: ... },
  {name:'Dog', ... },
  {name:'Gorilla', ... }
];

beasties.sort(function(a,b){return a.name > b.name});

在这里,我依靠 js 比较 name 属性返回的字符串的能力。

我认为这应该对你有用。

于 2012-10-06T21:10:14.517 回答
0

您可以将自定义比较函数传递给 Array.sort,然后排序算法将使用该函数来确定两个数组元素中的哪一个更大。当算法比较两个对象时,它将这些对象传递给比较函数。当函数返回 1 时,它认为第一个更大。当它返回 -1 时,它认为第二个更大。当它返回 0 时,它认为它们相等。

 function compare_function(obj1, obj2){
      if (obj1.name == obj2.name) return 0;
      if (obj1.name < obj2.name) return -1 else return 1;

  }
  my_array.sort(compare_function) 
于 2012-10-06T20:58:48.373 回答
0

您可以使用数组的排序方法,并传入一个函数:

Array1.sort(function(left,right) {
    if (left.name < right.name) return -1;
    if (left.name > right.name) return 1;
    return 0;
});
于 2012-10-06T21:00:24.493 回答