爲什麼這個函數返回的元素按字母順序排序而不是數字排序?無論使用Number
還是ParseFloat
,我都可以得到相同的結果。爲什麼按字母順序排序數字輸入?
function sortMe() {
var x = ["1.0","2.5", "11.0"];
var y = x.map(Number);
Logger.log(y.sort());
}
結果:1,11,2.5
爲什麼這個函數返回的元素按字母順序排序而不是數字排序?無論使用Number
還是ParseFloat
,我都可以得到相同的結果。爲什麼按字母順序排序數字輸入?
function sortMe() {
var x = ["1.0","2.5", "11.0"];
var y = x.map(Number);
Logger.log(y.sort());
}
結果:1,11,2.5
因爲Array#sort
各種字母,所以'11'
來'2'
之前。
的
sort()
方法進行排序的陣列in place的元素並返回該數組。排序不一定是stable。默認的排序順序是根據字符串Unicode代碼點。
爲了克服這個問題,你可以使用一個數值排序有一個回調,像
array.sort(function (a, b) {
return a - b;
});
,由於默認的排序順序是按照字符串的Unicode代碼點,無論你輸入的是什麼。您的Number
隱式轉換回字符串,然後排序。
sort()方法對數組的項進行排序。
排序順序可以是字母或數字,也可以是升序(上)或降序(下)。
默認情況下,sort()方法根據每個元素的Unicode點值按字母順序和升序排列值。
有一個看看這個例子:
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); // ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]
// Note that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort(); // ['1 Word', '2 Words', 'Word', 'word']
// In Unicode, numbers come before upper case letters,
// which come before lower case letters.
訂單可以是「默認」或「您在分類功能中編程的任何內容」。沒有「數字」或「升序/降序」的特殊設置。 –
它不是,你是無法傳遞一個數字數組,無論你通過Array#sort
會嘗試他們的Unicode表示的基礎上進行比較。取而代之的是通過一個比較器,比較你想在排序時想要比較的方式
y.sort((a,b)=>a-b)
Oy。顯然這是[它如何正確完成](https://stackoverflow.com/a/21595293/403455)。 –