✨ClosedRange
JS⟩ iteration ⟩ iterable ⟩ custom ⟩ ClosedRange
💾 replit:ClosedRange
👉 compare: *closedRange() (the easy way), *list()
// ⭐ closed range of integers 
// (an iterable, which can make iterators)
class ClosedRange {
    // init
    constructor(start, end) {
        this.start = start;
        this.end = end;
    }
    // ⭐ "make iterator" method
    // return an "iterator object" directly
    [Symbol.iterator]() {
        // private variables (in a closure) that can be accessed 
        // by the returned iterator
        let current = this.start;
        const { end } = this;
        // ⭐ return the iterator    
        return {
            
            // ⭐ an iterator must have the `next()` method
            next() {
                // ⭐ `next()` method must return an iteration result object.
                return (
                    (current <= end) ? { value: current++ } : { done: true }
                )
            },
            // make this iterator iterable for convenience
            [Symbol.iterator]() { return this },
        }
        
    }
}
// convenience function
function closedRange(start, end) {
    return new ClosedRange(start, end);
}💈範例:
// for-of loop
for (const i of closedRange(1, 3)) console.log(i); // 1 2 3
// spread into array elements
[...closedRange(1, 5)]        // [ 1, 2, 3, 4, 5 ]- *closedRange() - range of integers (generator: the easy way) 
- *list() - finite arithmetic sequence 
- *integers() - infinite non-negative integers 
Last updated
Was this helpful?