![](/img/trans.png)
[英]Javascript sort by digits sum doesn't work even with compare function. Why?
[英]Why doesn't the sort function of javascript work well?
这个简单的javascript
var x = new Array();
x[0] = 2.73;
x[1] = 11.17;
x[2] = 3.12
x.sort();
for(var i in x)
alert(x[i]);
产生结果: 11.17, 2.73, 3.12
代替2.73, 3.12, 11.17
。
为什么会这样,我该如何解决?
提前致谢!
它按字母顺序排序,请尝试传递您自己的排序功能:
var x = new Array();
x[0] = 2.73;
x[1] = 11.17;
x[2] = 3.12;
numberSort = function (a,b) {
return a - b;
};
x.sort(numberSort);
for(var i in x) {
alert(x[i]);
}
默认情况下, Array.sort
将按字母顺序(字母顺序)排序...但是您可以提供自己的函数。 尝试:
x.sort(function(a, b) { return a > b ? 1 : -1});
在它们之间,现有的答案可以告诉您所有信息,但是没有一个提及您的代码中的两个问题。 完整答案如下:
排序没有满足您的要求,因为默认排序是词法(即,数组元素转换为字符串并按字母顺序进行比较)。 您可以提供自己的sort()
比较函数:
x.sort(function(a, b) {
return a - b;
});
其次, for...in
实际上并没有告诉您有关数组是否正确排序的任何具体信息,因为未定义for...in
的枚举(即使大多数但不是所有浏览器都能大致执行您的期望)。 改用for
循环(实际上,通常应该对数组使用):
for (var i = 0, len = x.length; i < len; ++i) {
alert(x[i]);
}
您的迭代不正确。 它应该是:
for (var i = 0; i < x.length; i++) {
alert(x[i]);
}
当您在javascript中使用for..in
,它将循环遍历对象的属性,并且迭代顺序未定义。 您还应该看到一些奇怪的输出,例如Array类中定义的所有函数。
Array.sort()函数将其元素视为String,如果没有函数传递给sort()语句,它将把元素转换为Unicode并进行排序。 因此,建议在对数字进行排序时传递自定义的排序功能。
function customSort(a, b){
return a - b;
}
console.log([-11,-2, 0 ,100].sort(customSort));
此customSort()函数将按升序对数组in_place进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.