名称的简单排序算法-Javascript
如果我有一个对象数组数组1:名称的简单排序算法-Javascript,javascript,sorting,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, nam
[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类似于下面的[对象1(熊)、对象2(狗)、对象3(游击队)]
我如何用Javascript解决这个问题?有没有什么方便的方法?我对JS比较陌生。提前谢谢你 与自定义比较器一起使用:
Array1.sort(function(x, y){
var n1 = x.name;
var n2 = y.name;
return n1 == n2 ? 0
: n1 < n2 ? -1
: 1;
});
Array1.排序(函数(x,y){
var n1=x.name;
var n2=y.name;
返回n1==n2?0
:n1
将与自定义比较器一起使用:
Array1.sort(function(x, y){
var n1 = x.name;
var n2 = y.name;
return n1 == n2 ? 0
: n1 < n2 ? -1
: 1;
});
Array1.排序(函数(x,y){
var n1=x.name;
var n2=y.name;
返回n1==n2?0
:n1
您可以将一个自定义比较函数传递给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)
功能比较功能(obj1、obj2){
如果(obj1.name==obj2.name)返回0;
if(obj1.name 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)
功能比较功能(obj1、obj2){
如果(obj1.name==obj2.name)返回0;
if(obj1.nameArray1.sort(function(left,right) {
if (left.name < right.name) return -1;
if (left.name > right.name) return 1;
return 0;
});
Array1.sort(函数(左、右){
if(left.nameright.name)返回1;
返回0;
});
您可以使用数组的排序方法,并传入函数:
Array1.sort(function(left,right) {
if (left.name < right.name) return -1;
if (left.name > right.name) return 1;
return 0;
});
Array1.sort(函数(左、右){
if(left.nameright.name)返回1;
返回0;
});
请注意,sort
是就地排序,因此原始数组将被排序
请注意,
sort
是就地排序,因此原始数组将被排序。javascript排序方法接受匿名比较函数,该函数为您提供了对任何属性上的对象进行排序所需的所有灵活性
一般情况是:
arr.sort(function(a,b){...});
提供给sort方法的“匿名”函数接受两个要比较的对象,并应返回一个值,该值指示要将哪个元素排序得更高,如下所示:
如果a的排序应高于b,则返回1如果a的排序应低于b,则返回-1
如果a相当于b(用于排序),则返回0 下面是一个示例(省略号表示其他属性): 在这里,我依赖于js比较name属性返回的字符串的能力
我认为这应该对您起作用。javascript排序方法接受一个匿名比较函数,它为您提供了对任何属性上的对象进行排序所需的所有灵活性 一般情况是:
arr.sort(function(a,b){...});
提供给sort方法的“匿名”函数接受两个要比较的对象,并应返回一个值,该值指示要将哪个元素排序得更高,如下所示:
如果a的排序应高于b,则返回1如果a的排序应低于b,则返回-1
如果a相当于b(用于排序),则返回0 下面是一个示例(省略号表示其他属性): 在这里,我依赖于js比较name属性返回的字符串的能力
我认为这应该对你有帮助。@Alnitak:当你想要一个精确的比较时,这是有道理的。在这里它没有意义。如果
2
和“2”
被认为是不相等的,那么你希望2
或2>“2”
为真吗?我想你的意思是“函数”,但我喜欢这个答案,因为这里的代码非常明确…@Derek:方法是一个作为对象成员的函数。@Derek:Aha,现在我明白你的意思了。谢谢,修好了。:)@Guffa没问题。我只是想确保找到帖子并复制/粘贴此代码的任何其他人都不会对代码不起作用感到惊讶。同样,回答得很好…@Alnitak:当你想要一个精确的比较时,这是有道理的。在这里它没有意义。如果2
和“2”
被认为是不相等的,那么你希望2
或2>“2”
为真吗?我想你的意思是“函数”,但我喜欢这个答案,因为这里的代码非常明确…@Derek:方法是一个作为对象成员的函数。@Derek:Aha,现在我明白你的意思了。谢谢,修好了。:)@Guffa没问题。我只是想确保找到帖子并复制/粘贴此代码的任何其他人都不会对代码不起作用感到惊讶。再次,伟大的回答。。。