Files
taiko-web/SORT_FEATURE.md
AnthonyDuan 25c26b2b2e feat: 添加歌曲智能排序功能(默认启用)
- 实现智能排序:数字 -> 字母 -> 其他符号
- 添加 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 (更新功能介绍)
2025-11-15 15:59:08 +08:00

125 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 歌曲智能排序功能说明
## 功能概述
为 Taiko Web 项目添加了智能歌曲排序功能,按照**数字、字母、其他符号(包括中文、日文等)**的顺序自动排列歌曲。
**重要**:该功能已**默认启用**,用户无需任何设置。
## 排序规则
### 1. 字符类型优先级
- **数字** (0-9) - 最优先
- **英文字母** (A-Z, a-z) - 次优先
- **其他符号** (中文、日文、特殊符号等) - 最后
### 2. 同类型字符排序
- **数字**按数值大小排序例如1, 2, 10, 100
- **字母**:按字母顺序排序,不区分大小写
- **其他符号**:按 Unicode 编码排序
## 使用方法
### 默认行为
**无需任何操作!** 打开游戏后,歌曲已自动按智能顺序排列。
### 禁用排序(可选)
如果不需要排序功能:
1. 在歌曲选择界面找到 **"タイトル順で並べ替え"** 选项
2. 点击该选项
3. 输入 `false` 禁用
### localStorage 控制
也可以通过浏览器控制台手动设置:
```javascript
// 禁用排序
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)
```
### 实现特点
1. **字符类型识别**:通过 Unicode 编码判断字符类型
2. **自然排序**:使用 `localeCompare``numeric` 选项,确保数字按数值排序
3. **多语言支持**:支持英文、中文、日文等各种语言
4. **大小写不敏感**:字母排序时忽略大小写
## 代码变更
### 1. 调用智能排序
```javascript
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` 类中,实现:
- 字符类型判断(数字/字母/其他)
- 按类型优先级排序
- 同类型内自然排序
## 注意事项
1. 排序功能**默认启用**,首次使用即可看到效果
2. 排序状态会保存在浏览器的 localStorage 中
3. 刷新页面后排序设置会保持
4. 排序不会影响游戏的其他功能
5. 如需恢复原始顺序,可手动禁用排序
## 兼容性
- ✅ 支持所有现代浏览器
- ✅ 兼容触摸设备
- ✅ 不影响现有功能
## 未来改进方向
- [ ] 添加更多排序选项(难度、时长等)
- [ ] 添加自定义排序规则
- [ ] 添加排序方向切换(升序/降序)