[英]Merge and sort an array of numbers in numerical order - javascript
我正在尝试按数字顺序合并和排序2个数组。
function merge_arrays(a, b) {
console.log( (a.concat(b)).sort().join(" ") );
}
这对于数组中的一位数字可以正常工作,但是不能正确地对两位数字进行排序。
例如:
a:[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”之前。
若要执行数字排序,必须在调用sort方法时将函数作为参数传递。
该函数指定数字应按升序还是降序排序。
意义
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]
这是因为,如果未提供比较功能,sort会自动将要排序的列表元素转换为字符串。 在字符串区域“ 13” <“ 2”。
查看排序文档 。
因此,您可能想要的是这样的东西:
function compare_number(a,b) {
return a - b;
}
a.concat(b).sort(compare_number);
并完全回答您的问题:
a.concat(b).sort(compare_int).join(" ");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.