Javascript ES6 迭代器协议(protocol)和 forEach

标签 javascript ecmascript-6 iterator

目前我正在提高我的 ES6 技能。我正在研究迭代器/生成器语法。我有一个

的工作示例

class Library {
    constructor(){
        this._books = [];
    }
    addBook(book){
        this._books.push(book);
    }
    get books() {
        return this._books;
    }
    *[Symbol.iterator]() {
        for(let i=0; i<this._books.length; i++) {
            yield this._books[i];
        }
    }
}

l = new Library();
l.addBook("Book1");
l.addBook("Book2");

for(let book of l){
    console.log(book);
}

一切正常的地方。但我的第一个方法是尝试类似

*[Symbol.iterator]() {
    this._books.forEach(
        book => yield book
    )
}

(显然)这是不正确的。除了使用 forwhile 循环之外,还有更简洁的方法来编写此代码吗?

最佳答案

我会用 yield* 来做:

    *[Symbol.iterator]() {
        yield* this._books;
    }

关于Javascript ES6 迭代器协议(protocol)和 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231318/

相关文章:

javascript - 将 .csv 文件读取到 javascript 中的对象/数组

Javascript ES6 传播未定义的数组...[,,]

c++ - 迭代器在 C++ 中的工作原理

c++ - shared_from_this() 返回 std::shared_ptr<const X>,而不是 std::shared_ptr<X>

c++ - 通过 map.equal_range 问题 interator

javascript - jquery 使用 .css() 操作标签

javascript - 等待 promise 内的函数完成

javascript - AngularJS $q : How to chain promises then do parallel last in the chain?

angularjs - 使用 Angular + Webpack + es6 的数据表

javascript - chalk.bgHex 不是函数