2014-01-16 33 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(" ");