簡體   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