2013-01-11 119 views
1

我有一段代码触发了一些操作。在此之前,它只是对权重进行排序。当我使用时一切正常:weight.sort()其中weight是一个非空数组,例如[10 20 30 40],但是当我修改成:array.sort()和array.sort(function(a,b){return a - b;})有什么区别?

weight.sort(function(a,b) { 
    return a - b; 
}); 

行动的一个没有任何影响(显示一个div)。说实话,我不知道什么可能会导致差异。这对我来说似乎很奇怪,因为weight在对两种方法进行排序并明确更改该代码段使得我的脚本工作与否之后是相同的。 FireBug中没有错误。

+1

这里是一个有用的链接; https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort。 – Rikonator

回答

2

如果你

weight = weight.sort 

项目通过使用逐一比较排序。 => 2 > 10

但是当你做

weight = weight.sort(function(a,b) { return a - b; }); 

的项目为数字而不是字符串列表按升序排序进行比较。 => 2 < 10

此外,

weight = weight.sort(function(a,b){return b-a}); 

将降序排序。

+0

'返回a - b'与默认分拣机不一样。默认分拣机进行字典对比。 –

+0

@AtesGoral感谢您的更新...... – ATOzTOA

1

我们通常使用这种排序来实现某种自定义比较。在这种情况下,只调用sort的唯一区别是元素的顺序 - 使用您显示的代码,数组将按降序排列(从大到小排列),而不是典型的递增顺序。

请注意,无参数排序将返回b-a而不是符号不同的a-b,从而反转比较。

1

Array.prototype.sort没有自定义排序功能对lexicographical order中的项进行排序。

您可以定义自定义函数来使用它们的任何属性对任何类型的项进行排序。只要确保函数根据比较结果返回负数/正数或0即可。 (数字)

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

或者由他们priority性质的项目进行排序:例如,与name属性的对象根据名称进行排序,你可以使用

items.sort(function (a, b) { 
    return a.priority - b.priority; 
}); 

在您的自定义分拣机,您可以根据自己的喜好来比较任意数量的特性。另外请确保您优雅地处理未定义的项目或项目属性。一个设防的排序按姓名例如:

items.sort(function (a, b) { 
    var aName = a && a.name || "", 
     bName = b && b.name || ""; 
    return aName.localeCompare(bName); 
}); 
相关问题