2014-01-16 50 views
0

我想按數字順序合併和排序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

我錯過了什麼嗎?

+0

其實,我想通了,我錯過了裏面的排序選項功能.sort() .sort(function(c,d){return cd)} – TJXStyles

回答

4

MDN報價:

默認的排序順序是字典(不是數字)。

試試這個:

function merge_arrays(a, b) { 
    console.log((a.concat(b)).sort(function(a, b) { return a - b; }).join(" ")); 
} 
0

http://www.w3schools.com/jsref/jsref_sort.asp

見該節 注意:當數字字母順序排序, 「40」 到來之前 「5」。

要執行數字排序,您必須在調用排序方法時將函數作爲參數傳遞。

該函數指定數字是按升序還是降序排序。

含義這

function numOrdA(a, b){ return (a-b); } 

和你的代碼:

a.concat(b)).sort(numOrdA).join(" ") 
0

試試這個:

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」。

查看sort documentation

所以你可能想要的是這樣的:

function compare_number(a,b) { 
    return a - b; 
} 

a.concat(b).sort(compare_number); 

而且完全回答你的問題:

a.concat(b).sort(compare_int).join(" ");