为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2019-04-27 22:16:23
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)})})});如何用函数去实现,可以传入多个数组达到上面的效果
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

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'],['!','@','#','$']);
                            
查看完整回答
反对 回复 2019-04-27
?
互换的青春

TA贡献1797条经验 获得超6个赞

来个循环的,不过效率似乎没递归那个高,可能是因为创建的对象要多一些
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;
}
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 289 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信