You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS数组sort方法排序数字时100出现在首位的原因及解决方案

问题原因
  1. JavaScript 内置的Array.prototype.sort()方法默认采用*字典序(Unicode 编码顺序)*进行元素比较,而非数值大小比较。
  2. 你的代码中先对split得到的字符串数组执行排序,此时比较的是字符串的Unicode编码:字符串'100'的首个字符'1'的Unicode值小于'40'的首个字符'4',因此'100'会被排在'40'前面。后续执行map(Number)只是把排序后的字符串转成数字,不会调整已经确定的顺序。
解决方法

需要调整两个处理步骤的顺序,同时给sort方法传入数值比较的回调函数,指定按数值大小排序:

let number = '72 65 73 78 75 74 90 81 87 65 55 69 72 78 79 91 100 40 67 77 86';
// 先将分割得到的字符串数组统一转换为数字数组
let numberArray = number.split(' ').map(Number);
// 传入数值比较回调,a - b 代表按数值升序排列
let sortedNumber = numberArray.sort((a, b) => a - b);

console.log(sortedNumber);

执行后输出的排序结果为:

[40, 55, 65, 65, 67, 69, 72, 72, 73, 74, 75, 77, 78, 78, 79, 81, 86, 87, 90, 91, 100]

如果需要按数值降序排列,将回调修改为(a, b) => b - a即可。


内容的提问来源于stack exchange,提问作者Mentari_ER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:27:03