ES6 迭代器

1.什么是迭代

从一个数据集合中按照一定的顺序,不断的取出数据的过程。

2.迭代和遍历有什么区别

迭代强调的是依次取出,不能确定取出的有多少,也不能保证把数据全部取完。
遍历则需要知道数组的长度,且一次性取出。

3.迭代器是什么?

对迭代过程的一种封装,通常封装为对象的数据形式,不同的语言中,表现出来的迭代形式也是不一样的。

4.迭代模式

一种设计模式,用于统一迭代的过程,并且会规范代器的规格

js迭代器满足的条件:

1.迭代器有得到数据集合中下一个数据的能力
2.判断是否有后续数据的能力
js中迭代器 :如果一个对象有next()方法,并且返回一个对象,就认为这个对象为迭代器

const obj = {
      next(){
           return {
               value : a   //xxx  数据
               done : boolean //判断是否有后续数据
           }
       }
   }
定义一个数组,迭代这个数组里面的值。
const arr = [1,5,6,8,23,7,8];
const iterator = {  //用于迭代数组的对象,iterator为迭代器的名称
      i : 0,
       next(){
           let result = {
               value : arr[this.i],
               done : this.i >= arr.length
           }
           this.i++;
           return result;
       }
   }
   console.log(iterator.next());

在这里插入图片描述
当判断的值为 true 时,将取不到数据。
让迭代器自己取出数据

 let data = iterator.next();
    while(!data.done){
         console.log(data.value)
         data = iterator.next()
     }
    console.log("迭代完成")

在这里插入图片描述

自定义一个迭代器的函数.
const arr1 = [7,2,7,5,38,44,534]
        const arr2 = [33,86,754,83413,54,4,4]
        //创建一个迭代器的函数
        function createIterator(arr){
            let i = 0;
            return {
                next(){
                    let result = {
                        value : arr[i],
                        done : i >= arr.length
                    }
                    i++;
                    return result;
                }
            }
        }
        const iter1 = createIterator(arr1)
        const iter2 = createIterator(arr2)

在这里插入图片描述

创建一个斐波那契数列的迭代器 1 1 2 3 5 8 13 21 34…
 function createFeiBoIterator(){
       let prev1 = 1;
       let prev2 = 1; //定义前两位
       let n = 1;//当前第几位
       return {
           next(){
               let value;  //定义两数的和
               if(n<=2){   //当为前两位时,value值为1
                   value = 1;
               }else{
                   value = prev1 + prev2;
               }
               const result = {
                   value,
                   done : false
               }
               prev2 = prev1;
               prev1 = result.value;
               n++;
               return result;
           }
       }
   }
   const iterator = createFeiBoIterator();

在这里插入图片描述

ES6之后数组对象就已经有迭代的方法,可以直接使用.
在es6中,如果对象具有知名符号属性 Symbol.iterator,则表示对象可以使用迭代

在这里插入图片描述

const arr = [55,52,44,742,75,1]
const iterator = arr[Symbol.iterator](); 

在这里插入图片描述
可迭代的对象,可以用 for of 来遍历。

const arr = [55,52,44,742,75,1]
	for(let item of arr){
	    console.log(item)
	 }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值