上一篇文章我實作了使用疊代器周遊對象,本篇文章使用生成器去實作對象疊代,再使用生成器去實作一個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
}