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