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