繁体   English   中英

为什么javascript的排序功能无法正常工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM