- 实现智能排序:数字 -> 字母 -> 其他符号 - 添加 smartSort() 方法支持自然数值排序 - 默认启用排序功能,用户无需设置 - 支持多语言字符(中文、日文、英文等) - 添加完整的测试工具和文档 新增文件: - test_sort.html (可视化测试页面) - verify_sort.py (Python验证脚本) - verify_sort.js (Node.js验证脚本) - SORT_FEATURE.md (功能说明) - SORT_USAGE.md (使用指南) - QUICKSTART_SORT.md (快速开始) - IMPLEMENTATION_SUMMARY.md (实现总结) - CHANGELOG_SORT.md (更新日志) - UPDATE_SUMMARY.md (更新说明) 修改文件: - public/src/js/songselect.js (添加智能排序逻辑) - README.md (更新功能介绍)
3.0 KiB
3.0 KiB
歌曲智能排序功能说明
功能概述
为 Taiko Web 项目添加了智能歌曲排序功能,按照**数字、字母、其他符号(包括中文、日文等)**的顺序自动排列歌曲。
✨ 重要:该功能已默认启用,用户无需任何设置。
排序规则
1. 字符类型优先级
- 数字 (0-9) - 最优先
- 英文字母 (A-Z, a-z) - 次优先
- 其他符号 (中文、日文、特殊符号等) - 最后
2. 同类型字符排序
- 数字:按数值大小排序(例如:1, 2, 10, 100)
- 字母:按字母顺序排序,不区分大小写
- 其他符号:按 Unicode 编码排序
使用方法
默认行为
无需任何操作! 打开游戏后,歌曲已自动按智能顺序排列。
禁用排序(可选)
如果不需要排序功能:
- 在歌曲选择界面找到 "タイトル順で並べ替え" 选项
- 点击该选项
- 输入
false禁用
localStorage 控制
也可以通过浏览器控制台手动设置:
// 禁用排序
localStorage.setItem("titlesort", "false");
location.reload();
// 重新启用排序
localStorage.setItem("titlesort", "true");
location.reload();
// 禁用排序 localStorage.setItem("titlesort", "false");
## 排序示例
假设有以下歌曲标题:
未排序:
- 太鼓の達人
- Zyxwv
- 123
- abc
- 456
- Special
- 10
- あいうえお
- 2
- ZZZ
排序后:
- 2 (数字)
- 10 (数字)
- 123 (数字)
- 456 (数字)
- abc (字母)
- Zyxwv (字母)
- ZZZ (字母)
- Special (符号)
- あいうえお (日文)
- 太鼓の達人 (日文)
## 技术实现
### 修改文件
- `public/src/js/songselect.js`
### 核心函数
```javascript
smartSort(titleA, titleB)
实现特点
- 字符类型识别:通过 Unicode 编码判断字符类型
- 自然排序:使用
localeCompare的numeric选项,确保数字按数值排序 - 多语言支持:支持英文、中文、日文等各种语言
- 大小写不敏感:字母排序时忽略大小写
代码变更
1. 调用智能排序
const titlesort = localStorage.getItem("titlesort") ?? "false";
if (titlesort === "true") {
this.songs.sort((a, b) => this.smartSort(a.title, b.title));
}
2. 智能排序函数
添加了 smartSort(titleA, titleB) 方法到 SongSelect 类中,实现:
- 字符类型判断(数字/字母/其他)
- 按类型优先级排序
- 同类型内自然排序
注意事项
- 排序功能默认启用,首次使用即可看到效果
- 排序状态会保存在浏览器的 localStorage 中
- 刷新页面后排序设置会保持
- 排序不会影响游戏的其他功能
- 如需恢复原始顺序,可手动禁用排序
兼容性
- ✅ 支持所有现代浏览器
- ✅ 兼容触摸设备
- ✅ 不影响现有功能
未来改进方向
- 添加更多排序选项(难度、时长等)
- 添加自定义排序规则
- 添加排序方向切换(升序/降序)