11.1 迭代器 iterator
运用场景:React框架,fetch
1. 什么是迭代?
从一个数据集合中按照一定的顺序,不断取出数据的过程
2. 迭代和遍历的区别?
迭代强调依次取出,不能确定取出的数据有多少,也不能保证数据取完
遍历保证知道了数据的长度,,循环不断地全部取出,针对于数据量过大的时候使用遍历会花费很多事件
3. 迭代器
对迭代过程的封装,通常表现为对象的数据形式(也有数组的形式),不同的语言中,表现出来的形式是不一样
4. 迭代器满足的条件
1.有得到下一个数据的能力
2.判断是否有后续数据的能力
js中的迭代器:
js规定,如果一个对象有next方法,并且返回一个对象,就认为该对象为迭代器
```js
cosnt obj = {
next(){
return {
value : xxx,// 写一个数据
done : xxx//判断是否有后续数据的能力 一般为boolean
}
}
}
```
ES6之后数组对象Array就已经有迭代器的方法,可以直接使用
在ES6后,如果对象原型上具有知名符号属性Symbol.iterator方法,则表示该对象可迭代
5.1数组是可迭代对象,具有Symbol.iterator方法
5.2类数组也是可迭代对象
5.3对象不是可迭代对象
54.for...of... 专门遍历可迭代对象,不是可迭代对象不可以使用forof遍历
注意:扩展运算符(...)的展开功能只能在可迭代对象上使用
举例 :
<script>
// 斐波那契数列迭代器
// 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
}else{
value = prev1 + prev2;
}
const result = {
value,
done : false
}
prev1 = prev2;
prev2 = result.value;
n++;
return result;
}
}
}
const iterator = createFeiboIterator()
</script>