介绍
Iterator迭代器是用于遍历对象的一种接口,可以给不同的数据结构提供统一的循环方式实现遍历,可以与es6提供的for…of搭配使用。
具备原生的Iterator接口的数据结构
- Array
- String
- Set
- Map
- 函数中的argument对象
使用
-
Symbol.iterator:数据集合默认的遍历器生成函数,执行该函数便会返回一个遍历器对象
- 遍历器对象
- next():返回⼀个描述当前成员的信息对象,具有value和done两个属性,名称不可更改
- 遍历器对象
-
原生迭代器的数据结构使用
{
const arr = [1, 2, 3, 4];
const fn = arr[Symbol.iterator]();
console.log(fn.next());
console.log(fn.next());
console.log(fn.next());
console.log(fn.next()); // {value: 4, done: false}
console.log(fn.next()); // {value: undefined, done: true}
}
- 自定义对象迭代器的使用
{
let obj = {
name: "dog",
weight: 123,
height: 12,
[Symbol.iterator]() {
// 索引
let index = 0;
let values = Object.values(obj);
return {
next() {
if (index < values.length) {
return {
value: values[index++],
done: false,
};
} else {
return { done: true };
}
},
};
},
};
for (const value of obj) {
console.log(value); // dog 123 12
}
}