猿问

这种类型函数应该怎么封装

vararr=['1','2'];
vararr1=['a','b','c','d'];
vararr2=['!','@','#','$'];
//...arr3arr4arr5很多个
varnewArr=[];
arr.forEach(a1=>{
arr1.forEach(a2=>{
arr2.forEach(a3=>{
newArr.push(a1+a2+a3)
})
})
});
如何用函数去实现,可以传入多个数组达到上面的效果
月关宝盒
浏览 290回答 2
微课
2回答

慕虎7371278

functiona(...arrs){returninnerA('',arrs);}functioninnerA(prefix,arrs){const[fisrt,...rest]=arrs;if(!rest.length){returnfisrt.map(i=>prefix+i);}returnfisrt.reduce((acc,i)=>{acc=acc.concat(innerA(prefix+i,rest));returnacc;},[]);}a(['1','2'],['a','b','c','d'],['!','@','#','$']);

互换的青春

来个循环的,不过效率似乎没递归那个高,可能是因为创建的对象要多一些functionb(...groups){letr=[""];for(letgroupofgroups){r=r.map(t1=>group.map(t2=>t1+t2)).reduce((acc,t)=>acc.concat(t));}returnr;}如果不使用map(),直接用循环会效率高一些,比递归的效率高functionc(...groups){letr=[""];for(letgroupofgroups){constnewr=[];for(lett1ofr){for(lett2ofgroup){newr.push(t1+t2);}}r=newr;}returnr;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答