按数字顺序合并和排序数字数组 - javascript

时间:2014-01-16 05:32:32

标签: javascript arrays sorting

我正在尝试按数字顺序合并和排序2个数组。

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

这适用于数组中的单个数字,但它不能正确地对两位数字进行排序。

e.g:

a:[2,3,7,8,8,]

b:[7,8,13]

将输出为:13 2 3 7 7 8 8 8

我错过了什么吗?

3 个答案:

答案 0 :(得分:5)

引自MDN

  

默认排序顺序是词典(不是数字)。

请改为尝试:

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

答案 1 :(得分:0)

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

见该部分 注意:当数字按字母顺序排序时,“40”出现在“5”之前。

要执行数字排序,必须在调用sort方法时将函数作为参数传递。

该函数指定数字是按升序还是降序排列。

意思是这个

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

和你的代码:

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

答案 2 :(得分:0)

试试这个:

c = a.concat(b)
c == [2,3,7,8,8,7,8,13]
c.sort() == [13,2,3,7,7,8,8,8]

这是因为,当没有提供比较功能时,sort会自动将正在排序的列表元素转换为字符串。在弦乐地“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(" ");