网站首页 > 技术文章 正文
今天的挑战题目涉及到JavaScript中的生成器函数 (Generator) 和 Array.from 方法的结合使用。我们将利用生成器生成斐波那契数列,并通过 Array.from 创建一个包含前几个斐波那契数的数组。让我们一步步解析这段代码,看看它会输出什么以及为什么。
代码解析
首先,我们定义了一个生成器函数 fibGenerator:
function* fibGenerator() {
let a = 0, b = 1;
while (true) {
let next = a + b;
a = b;
b = next;
yield next;
}
}
这个生成器函数用于生成斐波那契数列。斐波那契数列的特点是从第三项开始,每一项的值都是前两项的和。在这个函数中:
- a 和 b 初始化为 0 和 1,分别表示斐波那契数列中的前两项。
- 在 while (true) 循环中,函数不断计算下一项 next = a + b,然后将 a 更新为 b,b 更新为 next。
- yield next 将当前计算的斐波那契数值返回,并暂停生成器的执行,直到下一次调用 next()。
接下来,代码创建了生成器对象 gen:
const gen = fibGenerator();
- gen 是 fibGenerator 函数返回的生成器对象。
然后,代码使用 Array.from 创建一个数组 fibArray,它包含了生成的前5个斐波那契数:
const fibArray = Array.from({ length: 5 }, () => gen.next().value);
- Array.from({ length: 5 }, ...) 创建一个长度为5的数组。
- 第二个参数是一个映射函数,每个元素调用 gen.next().value,这会从生成器中获取下一个斐波那契数值。
计算斐波那契数列的前几项
让我们手动计算一下生成器产生的前几项斐波那契数值:
- 初始 a = 0,b = 1。
- 第一次调用 gen.next():
- next = a + b = 0 + 1 = 1
- a 更新为 1,b 更新为 1
- yield 返回 1
- 第二次调用 gen.next():
- next = a + b = 1 + 1 = 2
- a 更新为 1,b 更新为 2
- yield 返回 2
- 第三次调用 gen.next():
- next = a + b = 1 + 2 = 3
- a 更新为 2,b 更新为 3
- yield 返回 3
- 第四次调用 gen.next():
- next = a + b = 2 + 3 = 5
- a 更新为 3,b 更新为 5
- yield 返回 5
- 第五次调用 gen.next():
- next = a + b = 3 + 5 = 8
- a 更新为 5,b 更新为 8
- yield 返回 8
因此,fibArray 将包含前5个生成的斐波那契数,即 [1, 2, 3, 5, 8]。所以 console.log(fibArray) 的输出是:
console.log(fibArray); // 输出 [1, 2, 3, 5, 8]
结束
这道题目展示了生成器函数与 Array.from 的巧妙结合,生成并收集斐波那契数列中的前几项。理解生成器的工作方式以及 Array.from 的用法对于正确解答这道题目至关重要。你答对了吗?欢迎在评论区分享你的答案和见解!
猜你喜欢
- 2024-10-04 前端工程师面试题汇总 前端工程师面试试题
- 2024-10-04 2023年前端面试题Augluar基础面试题
- 2024-10-04 这几个前端面试题,答案可能不全,但题目值得收藏
- 2024-10-04 「精辟」前端31道JavaScript面试题(配答案)
- 2024-10-04 220Web前端常见面试题及答案整理汇总
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 529℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 520℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 515℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 485℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 483℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)