![](/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.