| 156 | // ==================== 路径计算 ==================== |
| 157 | |
| 158 | export function getMessagePath(messages: ChatMessage[], leafId: string | undefined): ChatMessage[] { |
| 159 | if (!leafId) return [] |
| 160 | |
| 161 | // 预构建 Map - O(N) 一次性 |
| 162 | const messageMap = new Map(messages.map((m) => [m.id, m])) |
| 163 | |
| 164 | const path: ChatMessage[] = [] |
| 165 | let currentId: string | undefined = leafId |
| 166 | |
| 167 | while (currentId) { |
| 168 | const message = messageMap.get(currentId) // O(1) 而非 O(N) |
| 169 | if (!message) break |
| 170 | path.push(message) // O(1) 而非 O(N) 的 unshift |
| 171 | currentId = message.parentMessageId |
| 172 | } |
| 173 | |
| 174 | return path.reverse() // 一次 reverse O(N) 比多次 unshift O(N²) 快 |
| 175 | } |
| 176 | |
| 177 | export function getCurrentPath(pageId: string): ChatMessage[] { |
| 178 | const record = stores.message.get(pageId) |