上一篇文章我实现了使用迭代器遍历对象,本篇文章使用生成器去实现对象迭代,再使用生成器去实现一个python的range函数
个人感觉使用生成器来迭代对象:代码简洁,易于理解
let fn1=Symbol("2");
const obj2={
name:"生成器",
arr:[1,2,3],
*[Symbol.iterator](){
let index=0;
let arr=Object.getOwnPropertyNames(obj2);
while(index<arr.length){
yield this[arr[index++]];
}
},
[fn1]:'fn1', //Symbol 类型不可被迭代
}
for(const value of obj2){
console.log(value);
//生成器
//[1, 2, 3]
}
在学习python的阶段时,我发现python的range函数还是蛮好用的,但是js没有这个函数,但是可以通过生成器来实现一下:
//实现range
function* range(x, y = null) {
const result=[...arguments].some((item)=>!(typeof item ==='number'));
if(result){
throw new Error('不合法的实参');
}
if(arguments.length === 1 || arguments.length === 2){
if (!y) {
y = x;
x = 0;
}
while (y > x) {
yield x++;
}
}else{
throw new Error('实参只能是1个或2个')
}
}
for(const value of range(5,10)){
console.log(value); // 5 6 7 8 9
}
for(const value of range(5)){
console.log(value); //0 1 2 3 4
}