用js完成[12, 3, 24, 1, 932, 6423] 按照首位排序
思否 问答 已采纳 👍 7 含 AI 优化版
问题
用js完成[12, 3, 24, 1, 932, 6423] 按照首位排序
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
给定数组 [12, 3, 24, 1, 932, 6423],需要按照数字的“首位数字”(即转成字符串后的字典序)进行排序。
涉及技术
Array.prototype.sort
期望结果
得到按首位数字排序后的结果。
回答
原始回答
[12, 3, 24, 1, 932, 6423].sort()巧了,sort 默认就是你要的效果
AI 优化 · 回答整理
解答思路
Array.prototype.sort() 在不传比较函数时,会先把元素转换成字符串,再按字符(字典序/Unicode 码点)进行比较排序,这恰好等价于“按首位数字排序”。
示例代码
const arr = [12, 3, 24, 1, 932, 6423];
console.log(arr.sort());
// [1, 12, 24, 3, 6423, 932]
详细说明
- 默认
sort()会把每个数字转成字符串再比较,例如'932'和'12'比较时,先比较首字符'9'和'1','1'更小,所以12排在932前面,这正好符合“按首位”排序的直觉。 - 需要注意:这是
sort()的默认行为,如果目的是数值大小排序,必须显式传入比较函数arr.sort((a, b) => a - b),否则会得到本例这种按字符串比较的结果。
小结
恰好利用了 sort() 不传参数时按字符串比较的默认行为,实现了“按首位数字排序”的效果;但要清楚这是默认行为的副作用,不要与数值排序混淆。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault