Bash中如何按数值排序数组并存入另一个数组?
解决数值数组按数值规则排序的问题
嘿,这个问题在处理JavaScript数组排序时可太常见啦!默认的Array.sort()方法是按照字符串的Unicode编码顺序来排序的,所以直接用在数值数组上会出现完全不符合预期的结果——比如[12, 3, 25]会被排成[12, 25, 3],因为字符串"12"的第一个字符"1"比"2"小,而"2"又比"3"小,完全没按数值大小来。
要改成按数值规则排序,只需要给sort()方法传入一个比较函数就行,它会明确告诉排序算法怎么比较两个数值的大小:
1. 升序排序(从小到大)
直接在比较函数里返回a - b:
const numArray = [12, 3, 25, 8, 1]; // 先复制原数组避免修改原数据,不需要保留原数组的话可以直接用numArray.sort(...) const sortedAsc = [...numArray].sort((a, b) => a - b); console.log(sortedAsc); // 输出: [1, 3, 8, 12, 25]
2. 降序排序(从大到小)
把比较函数改成返回b - a就可以实现反向排序:
const numArray = [12, 3, 25, 8, 1]; const sortedDesc = [...numArray].sort((a, b) => b - a); console.log(sortedDesc); // 输出: [25, 12, 8, 3, 1]
额外小提示
- 如果数组里包含
NaN,它会被自动排到数组末尾,不管是升序还是降序排序。 - 这个方法对包含正负数值的数组也完全适用,比如
[-5, 10, -2]升序后会变成[-5, -2, 10]。
最后给你看个反例,感受下默认字符串排序的坑:
const numArray = [12, 3, 25, 8, 1]; const wrongSorted = numArray.sort(); console.log(wrongSorted); // 输出: [1, 12, 25, 3, 8]
是不是和数值排序的预期差了十万八千里?所以加上比较函数才是正确打开方式!
内容的提问来源于stack exchange,提问作者Echchama Nayak
相关产品推荐
相关产品推荐

