JavaScript重写Symbol(Symbol.iterator)实现迭代器(1)

iterator迭代,做的跟java集合迭代差不多就行了

示例图
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>对象遍历重写iterator接口1</h1>
</body>
    <script>
        let arr = [1,2,3,4,5,6,7,8,9];
        console.log(arr);
        //for of 底层调用的是 Symbol(Symbol.iterator)
        for(let i of arr){
            console.log(i);
        }
        console.log('%c-------------------------------------------------------','color:red');

        //初步重写Symbol(Symbol.iterator)
        function iteratorUtil(target){
            let index = -1;
            return {
                next(){
                    let len = target.length;
                    index++;
                    return  index < len ? {value:target[index],hasNext:true}:{value:target[index],hasNext:false};
                }
            };
        }

        let arr1 = [1,2,3,4];
        let iterator = iteratorUtil(arr1);
        console.log( iterator.next()); //{value: 1, hasNext: true}
        console.log( iterator.next()); //{value: 2, hasNext: true}
        console.log( iterator.next()); //{value: 3, hasNext: true}
        console.log( iterator.next()); //{value: 4, hasNext: true}
        console.log( iterator.next()); //{value: undefined, hasNext: false}
        
        console.log('%c------------------------------------------------------','color:red');
        let arr2 = [4,3,2,1];
        let iterator2 = iteratorUtil(arr2);
        let item;
        while( (item = iterator2.next()).hasNext){
            console.log(item);
        }

    </script>
</html>

猜你喜欢

转载自blog.csdn.net/qq_38188047/article/details/106583165