天天看點

JavaScript生成器實作 對象疊代和python range函數

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

繼續閱讀