MST

星途 面试题库

面试题:JavaScript迭代器与生成器的结合应用

假设你有一个生成器函数,它生成从1到n的数字。请结合迭代器,实现一个功能,使得每次迭代不仅返回数字,还返回该数字的平方。说明你使用的技术点以及如何管理状态。
45.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
class SquaredGenerator:
    def __init__(self, n):
        self.n = n
        self.current = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.current > self.n:
            raise StopIteration
        result = (self.current, self.current ** 2)
        self.current += 1
        return result


# 使用示例
n = 5
generator = SquaredGenerator(n)
for number, square in generator:
    print(f"数字: {number}, 平方: {square}")

技术点说明

  1. 迭代器协议:实现了 __iter____next__ 方法,使得对象可以作为迭代器使用。__iter__ 方法返回迭代器对象本身,__next__ 方法返回下一个值。
  2. 状态管理:在类中定义了 self.current 来记录当前生成到哪个数字,每次调用 __next__ 时更新这个状态,当 self.current 超过 n 时,抛出 StopIteration 异常表示迭代结束。

另一种使用生成器函数实现的方式

def squared_generator(n):
    for i in range(1, n + 1):
        yield (i, i ** 2)


# 使用示例
n = 5
for number, square in squared_generator(n):
    print(f"数字: {number}, 平方: {square}")

技术点说明

  1. 生成器函数:使用 yield 关键字定义一个生成器函数,每次迭代时生成一个包含数字及其平方的元组。
  2. 状态管理:生成器函数内部使用 for 循环隐式地管理状态,每次循环时更新 i 的值,直到 i 达到 n + 1 循环结束,生成器自动停止迭代。