📊 文本行排序
升序/降序/自然排序/随机/反转
什么是文本行排序工具?
文本行排序工具是一款对多行文本按行进行排序的在线工具。在编程和数据处理中,经常需要对列表、配置项、日志条目等文本数据进行排序。无论是字母表排序(A-Z/Z-A)、数字大小排序、按行长度排序,还是自定义排序规则,本工具都能快速完成。相比在 Excel 中操作或使用命令行 sort 命令,在线排序工具无需切换环境,粘贴文本后立即得到排序结果。工具支持多种排序模式:升序、降序、不区分大小写排序、自然排序(正确处理数字后缀如 file1, file2, file10)、按行长度排序、随机打乱顺序等。所有操作在浏览器端完成,数据安全不上传。
如何使用文本行排序工具
- 步骤一:粘贴文本内容 — 将需要排序的多行文本粘贴到输入框中。每行作为独立的排序单元,工具自动按换行符分割。
- 步骤二:选择排序方式 — 选择排序类型:字母升序(A→Z)、字母降序(Z→A)、数字排序、行长度排序、自然排序等。还可以勾选"去除空行"和"去重"选项。
- 步骤三:获取排序结果 — 排序结果实时显示在输出区。复制结果或下载为文件。工具同时显示排序统计信息(总行数、非空行数等)。
常见使用场景
场景一:配置文件中的依赖排序
package.json 中的 dependencies 需要按字母顺序排列以保持 Git 差异的清晰性。使用排序工具对依赖列表进行字母排序,避免因排列顺序不同产生无意义的代码变更。
场景二:日志文件时间排序
将多个来源的日志合并后,按时间戳排序以获得正确的事件顺序。对于格式统一的日志(如 ISO 8601 时间戳在前),字母排序即为时间排序。
场景三:CSS 属性排序
按照团队规范对 CSS 属性进行排序(如定位属性→盒模型→排版→视觉属性)。将属性列表粘贴后排序,再按预定义的顺序重新排列,保持代码风格统一。
技术原理
JavaScript 的 Array.prototype.sort() 方法使用 TimSort 算法(V8 引擎),时间复杂度 O(n log n)。默认的 sort() 将元素转为字符串后按 UTF-16 码元值比较,这会导致大写字母排在小写字母前面(因为 'A'(65) < 'a'(97))。不区分大小写排序需要自定义比较函数。localeCompare() 方法支持本地化的字符串比较,能正确处理 Unicode 字符和中文拼音排序。
// 多种排序实现
function sortLines(text, mode) {
const lines = text.split('\n');
switch(mode) {
case 'asc':
return lines.sort((a, b) => a.localeCompare(b));
case 'desc':
return lines.sort((a, b) => b.localeCompare(a));
case 'numeric':
return lines.sort((a, b) => parseFloat(a) - parseFloat(b));
case 'length':
return lines.sort((a, b) => a.length - b.length);
case 'natural':
return lines.sort((a, b) =>
a.localeCompare(b, undefined, { numeric: true })
);
}
}
最佳实践与注意事项
- 注意默认排序是按字符编码值比较,"10" 会排在 "2" 前面(因为 '1' < '2')。数字排序请使用自然排序模式。
- 处理包含中文的文本时,使用 localeCompare 并指定 locale(如 'zh-CN')可以按拼音排序。
- 排序前确认是否保留空行和重复行,根据需求勾选相应选项。
- 对于超大文件(>10万行),浏览器可能响应缓慢,建议使用命令行工具如
sort命令处理。
常见问题
Q:默认排序为什么大写字母排在小写前面?
A>JavaScript 默认按 UTF-16 编码值比较,大写字母 A-Z 编码值 65-90,小写 a-z 为 97-122。所以 'Z'(90) < 'a'(97)。解决方法:使用 localeCompare() 或转换为统一大小写后再比较。
Q:什么是"自然排序"?
A>自然排序(natural sort)正确处理数字后缀:file2 排在 file10 前面(而不是按字符比较把 file10 排在 file2 前面)。通过 localeCompare 的 { numeric: true } 选项实现,它会将连续数字视为一个整体进行比较。
Q:中文文本能按拼音排序吗?
A>可以。使用 a.localeCompare(b, 'zh-CN') 按拼音排序中文。但需要注意多音字问题——"重"可能排为 chóng 或 zhòng。对于精确的拼音排序需求,建议使用 pinyin 库先转换为拼音再排序。
Q:如何按特定规则排序(如按文件扩展名)?
A>可以使用自定义排序函数。例如按扩展名排序:提取每行的扩展名作为排序键,然后比较。本工具暂不支持自定义排序键,建议使用代码实现:lines.sort((a,b) => ext(a).localeCompare(ext(b)))。
Q:排序操作会影响原始文本的换行符吗?
A>工具会保留换行符。输出统一使用 \n(LF)格式。如果你的原始文本使用 \r\n(CRLF,Windows 格式),排序后会被统一为 \n。如需保持 CRLF 格式,可以在复制后使用编辑器转换。