繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM