猿问

求大佬指点哈!函数封装,求指导?

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)})})});如何用函数去实现,可以传入多个数组达到上面的效果
POPMUISE
浏览 156回答 2
2回答

慕码人8056858

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'],['!','@','#','$']);

哔哔one

来个循环的,不过效率似乎没递归那个高,可能是因为创建的对象要多一些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
我要回答