前端路由历史栈结构
使用栈结构存储前端路由历史记录
问题
前端路由 a -> b -> c 这样前进,也可以返回 c -> b -> a,用什么数据结构来存比较高效?
解答
使用**栈(Stack)**数据结构最合适。栈是后进先出(LIFO)的线性结构,天然符合路由历史的访问模式。
工作原理
前进过程:每访问一个新页面,将路由信息压入栈顶
const routeStack = [];
// 访问 a
routeStack.push('a'); // ['a']
// 访问 b
routeStack.push('b'); // ['a', 'b']
// 访问 c
routeStack.push('c'); // ['a', 'b', 'c']
后退过程:从栈顶弹出路由信息,显示前一个页面
// 从 c 返回 b
const current = routeStack.pop(); // 'c'
const previous = routeStack[routeStack.length - 1]; // 'b'
// routeStack: ['a', 'b']
// 从 b 返回 a
routeStack.pop(); // 'b'
const previous = routeStack[routeStack.length - 1]; // 'a'
// routeStack: ['a']
简单实现
class RouteHistory {
constructor() {
this.stack = [];
}
push(route) {
this.stack.push(route);
}
back() {
if (this.stack.length > 1) {
this.stack.pop();
return this.stack[this.stack.length - 1];
}
return null;
}
current() {
return this.stack[this.stack.length - 1];
}
}
关键点
- 栈的 push 和 pop 操作时间复杂度都是 O(1),性能高效
- 后进先出的特性完美匹配路由的前进和后退逻辑
- 需要处理浏览器刷新、直接跳转等特殊场景
- 实际应用中可结合 History API 或 Hash 模式实现
目录