JS iterator

JS Iterator

Create Custom Iterator next : () =>

function iterator(){
    let step = 0;

    return {
        next : ()=>{
            step ++;
            if (step ==1 ){
                return {value : 'cake', done : false};
            }
            if (step ==2  ){
                return {value : 'yogurt', done : false};
            }
            if (step == 3) {
                return {value : 'bread', done : false};
            }
            else{
                return {value : undefined, done :true}
            }
        }
    };
}

const it = iterator();
console.log(it);    // { next: [Function: next] }
console.log(it.next()); // {value : 'cake', done : false};
console.log(it.next()); // {value : 'yogurt', done : false};
console.log(it.next());  // {value : 'bread', done : false};
console.log(it.next());  // {value : undefined, done :true}

The same result for next(){} below

function iterator(){
    let step = 0;

    return {
        next() {
            step ++;
            if (step ==1 ){
                return {value : 'cake', done : false};
            }
            if (step ==2  ){
                return {value : 'yogurt', done : false};
            }
            if (step == 3) {
                return {value : 'bread', done : false};
            }
            else{
                return {value : undefined, done :true}
            }
        }
    };
}
  • Output
inakamono@ninja MINGW64 ~
$ node iterator-test.js 
{ next: [Function: next] }
{ value: 'cake', done: false }  
{ value: 'yogurt', done: false }
{ value: 'bread', done: false } 
{ value: undefined, done: true }

Spread operator …iterator

function iterator(){
    let step = 0;

    return {
        next : ()=>{
            step ++;
            if (step ==1 ){
                return {value : 'cake', done : false};
            }
            if (step ==2  ){
                return {value : 'yogurt', done : false};
            }
            if (step == 3) {
                return {value : 'bread', done : false};
            }
            else{
                return {value : undefined, done :true}
            }
        }
    };
}

const my_it = {}
my_it[Symbol.iterator] = iterator;
console.log(...my_it);  // cake yogurt bread

with this

function iterator(){
    let step = 0;

    return {
        prefix : "delicious",
        next() {
            step ++;
            if (step ==1 ){
                return {value : this.prefix + ' cake' , done : false};
            }
            if (step ==2  ){
                return {value : this.prefix + ' yogurt', done : false};
            }
            if (step == 3) {
                return {value : this.prefix + ' bread', done : false};
            }
            else{
                return {value : undefined, done :true}
            }
        }
    };
}

const it = iterator();
console.log(it);    // { prefix: 'delicious', next: [Function: next] }
console.log(it.next()); //{ value: 'delicious cake', done: false }
console.log(it.next()); // { value: 'delicious yogurt', done: false }
console.log(it.next());  // { value: 'delicious bread', done: false }
console.log(it.next());  // { value: undefined, done: true }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值