用js完成[12, 3, 24, 1, 932, 6423] 按照首位排序

思否 问答 已采纳 👍 7 含 AI 优化版

问题

用js完成[12, 3, 24, 1, 932, 6423] 按照首位排序

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

给定数组 [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

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。