ES6 迭代器

    技术2022-07-10  201

    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) }

    Processed: 0.027, SQL: 9