名称的简单排序算法 - Javascript

时间:2012-10-06 20:50:28

标签: javascript sorting

如果我有一个对象数组数组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比较陌生。提前谢谢!

5 个答案:

答案 0 :(得分:1)

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

Array1.sort(function(x, y){
  var n1 = x.name;
  var n2 = y.name;
  return n1 == n2 ? 0
    : n1 < n2 ? -1
    : 1;
});

答案 1 :(得分:1)

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

请注意,sort就地排序,因此您的原始数组将进行排序。

答案 2 :(得分:1)

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

一般模式是:

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

提供给sort方法的“anonymous”函数接受两个要比较的对象,并且应该返回一个值,该值指示要排序的元素,如下所示:

如果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属性返回的字符串的能力。

我认为应该为你做这个伎俩。

答案 3 :(得分: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) 

答案 4 :(得分:0)

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

Array1.sort(function(left,right) {
    if (left.name < right.name) return -1;
    if (left.name > right.name) return 1;
    return 0;
});