JS 快速处理上万数据 (asyncFor已封装) - 戴向天

大家好!我叫戴向天

QQ群:602504799

QQ:809002582

function asyncFor({data,num,handle}){
			return new Promise(function(r,j){
				// arr 数据  num 每组数据的个数
				function getGroup(arr,num){
					let group = []
					for(let i=0;i<arr.length;i+=num){
						group.push(arr.slice(i, i+num))
					}
					return group
				}
				const group = getGroup(data,num)
				let resultGroup= new Array(group.length)
				let doneNum = 0;
				for(let i=0;i < group.length;i++){
					setTimeout(function(){
						doneNum++
						resultGroup[i] = handle?handle(group[i],i*num):group[i]
						if(doneNum === group.length){
							let result = []
							for(let r = 0;r<resultGroup.length;r++){
								result = result.concat(resultGroup[r])
							}
							return r(result)
						}
					})
				}
			})
		}
		
		
		
		// dome 测试
		(async function(){
			const arr = new Array(10000)
			const  nowTime = +new Date()
			const result = await asyncFor({
				data:arr,
				num:500,
				handle:function(res,index){
					for(let i = 0;i < res.length;i++){
						res[i] = {
							name:'戴向天'+(index+i+1),
						}
					}
					return res;
				}
			})
			console.log('共计花费了:'+ (+new Date() - nowTime)+'ms')
			console.log(result)
			console.log('开始重新处理结果')
			const alignTime = +new Date()
			const result2 = await asyncFor({
				data:result,
				num:500,
				handle:function(res,index){
					for(let i = 0;i < res.length;i++){
						res[i] = {
							...res[i],
							index:index+i+1
						}
					}
					return res;
				}
			})
			console.log('共计花费了:'+ (+new Date() - alignTime)+'ms')
			console.log(result2)
		})()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值