我想按數字順序合併和排序2個數組。按數字順序合併和排序數字 - javascript
function merge_arrays(a, b) {
console.log((a.concat(b)).sort().join(" "));
}
這適用於數組中的單個數字,但它不能正確地對數字進行排序。
例如:
一個:[2,3,7,8,8,]
B:7,8,13]
將輸出爲:13 2 3 7 7 8 8 8
我錯過了什麼嗎?
我想按數字順序合併和排序2個數組。按數字順序合併和排序數字 - javascript
function merge_arrays(a, b) {
console.log((a.concat(b)).sort().join(" "));
}
這適用於數組中的單個數字,但它不能正確地對數字進行排序。
例如:
一個:[2,3,7,8,8,]
B:7,8,13]
將輸出爲:13 2 3 7 7 8 8 8
我錯過了什麼嗎?
從MDN報價:
默認的排序順序是字典(不是數字)。
試試這個:
function merge_arrays(a, b) {
console.log((a.concat(b)).sort(function(a, b) { return a - b; }).join(" "));
}
http://www.w3schools.com/jsref/jsref_sort.asp
見該節 注意:當數字字母順序排序, 「40」 到來之前 「5」。
要執行數字排序,您必須在調用排序方法時將函數作爲參數傳遞。
該函數指定數字是按升序還是降序排序。
含義這
function numOrdA(a, b){ return (a-b); }
和你的代碼:
a.concat(b)).sort(numOrdA).join(" ")
試試這個:
c = a.concat(b)
c == [2,3,7,8,8,7,8,13]
c.sort() == [13,2,3,7,7,8,8,8]
這是因爲,當不具備比較功能,排序自動轉換它正在排序爲字符串的列表的元素。在字符串土地「13」<「2」。
所以你可能想要的是這樣的:
function compare_number(a,b) {
return a - b;
}
a.concat(b).sort(compare_number);
而且完全回答你的問題:
a.concat(b).sort(compare_int).join(" ");
其實,我想通了,我錯過了裏面的排序選項功能.sort() .sort(function(c,d){return cd)} – TJXStyles