2012-06-27 53 views
2

我練的數據可視化庫d3.js,和我使用的是隨機數據發生器等同於以下內容:爲什麼numberArray.sort()不能在JavaScript中正確地排序數字?

function generateRandomData() { 
    var i, 
     data = []; 
    for (i = 0; i < 100; i += 1) { 
     data.push(Math.random() * 100); 
    } 
    return data; 
} 

我存儲的價值,並嘗試進行排序,如下所示:

var data = generateRandomData(); 
data.sort(); 

不幸的是,排序的數據集沒有完全排序 - 其中一些值實際上是不正確的。例如,我會有數字,如[12,15,18,21,3,18 ...]。排序功能不準確的原因是什麼?

注:我發現了一個合適的解決方案,它解決了我的問題:

data.sort(function (a, b) { return b - a; }); 

我只是想知道爲什麼排序()是不可靠的。

回答

2

sort()函數如果在沒有自定義排序函數的情況下調用,則函數會將Array中的所有內容視爲字符串。

唯一的例外是undefined,它來自Javascript 1.2,始終是排序數組中的「最大」項。

[void(0),342,4.5,"ahahaha",null,"zzz", "nen", "nup", 0/0, "KDSFL", "-sdfh",-3324, "-%",Array.prototype.sort,window,Array.zzz,"[oooooo]", "undefined",0].sort() 

參考:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

+0

不幸的是,而正確的(+1),這個不同意在後給出... – 2012-06-27 02:44:21

+0

OP的的'[12,15示例結果的 「結果」 ,18,21,3,18 ...]可能只是一個例子,因爲在該數組上運行sort()(減去橢圓)會導致[12,15,18,18,21,3],這是正確的排序順序,假設所有值都是字符串 – jackwanders

+0

@pst true;我以爲你在質疑答案的有效性 – jackwanders

相關問題