⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

构建可双向迭代的自定义可迭代对象

超越简单的 for...of,实现一个二叉树数据结构同时支持正向(中序)和反向(逆中序)迭代,使用 Symbol.iterator 和 Symbol.asyncIterator。 · 难度:入门 · +10XP

构建可双向迭代的自定义可迭代对象

JavaScript 的迭代器协议只定义了 next(),但我们可以通过返回不同的迭代器对象来实现双向遍历。本教程将实现一个二叉搜索树,内部维护节点数组,并提供两个方法:createForwardIterator 和 createReverseIterator,分别用 Symbol.iterator 和单独的 reverse 属性暴露。甚至可以用生成器函数简化实现,并支持 break 退出。

class Tree { constructor() { this.nodes = []; } add(value) { /* 插入排序 */ } [Symbol.iterator]() { let index = 0; return { next: () => ({ value: this.nodes[index++], done: index > this.nodes.length }) }; } reverse() { let index = this.nodes.length - 1; return { [Symbol.iterator]: () => ({ next: () => ({ value: this.nodes[index--], done: index < -1 }) }) }; } }
const tree = new Tree(); tree.add(3); tree.add(1); tree.add(2); console.log([...tree]); // 1,2,3 console.log([...tree.reverse()]); // 3,2,1
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0