我正在尝试按数字顺序合并和排序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
我错过了什么吗?
答案 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”。
所以你可能想要的是这样的:
function compare_number(a,b) {
return a - b;
}
a.concat(b).sort(compare_number);
完全回答你的问题:
a.concat(b).sort(compare_int).join(" ");