1.什么是迭代
从一个数据集合中按照一定的顺序,不断的取出数据的过程。
2.迭代和遍历有什么区别
迭代强调的是依次取出,不能确定取出的有多少,也不能保证把数据全部取完。 遍历则需要知道数组的长度,且一次性取出。
3.迭代器是什么?
对迭代过程的一种封装,通常封装为对象的数据形式,不同的语言中,表现出来的迭代形式也是不一样的。
4.迭代模式
一种设计模式,用于统一迭代的过程,并且会规范代器的规格
js迭代器满足的条件:
1.迭代器有得到数据集合中下一个数据的能力 2.判断是否有后续数据的能力 js中迭代器 :如果一个对象有next()方法,并且返回一个对象,就认为这个对象为迭代器
const obj
= {
next(){
return {
value
: a
done
: boolean
}
}
}
定义一个数组,迭代这个数组里面的值。
const arr
= [1,5,6,8,23,7,8];
const 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;
}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
)
}