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
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值