这个简单的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
。
为什么会这样,我该如何解决?
提前致谢!
答案 0 :(得分:16)
按字母顺序排序,尝试传递自己的排序功能:
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]);
}
答案 1 :(得分:9)
默认情况下,Array.sort
将按字母顺序(以词汇方式)排序......但您可以提供自己的功能。尝试:
x.sort(function(a, b) { return a > b ? 1 : -1});
答案 2 :(得分:3)
在他们之间,现有的答案告诉你一切,但他们都没有提到代码中的两个问题。这是完整的答案:
排序不是你想要的,因为默认排序是词法的(即数组元素被转换为字符串并按字母顺序进行比较)。您可以为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]);
}
答案 3 :(得分:1)
您没有正确迭代。它应该是:
for (var i = 0; i < x.length; i++) {
alert(x[i]);
}
当你在javascript中使用for..in
时,这将遍历对象的属性,并且迭代的顺序是未定义的。您应该看到一些奇怪的输出,例如Array类中定义的所有函数。
答案 4 :(得分:0)
Array.sort()函数将其元素视为字符串,如果没有函数传递给sort()语句,它会将元素转换为Unicode并进行排序。因此,建议在对数字进行排序时传递自定义排序函数。
function customSort(a, b){
return a - b;
}
console.log([-11,-2, 0 ,100].sort(customSort));
此customSort()函数将按升序对数组in_place进行排序。