猿问

关于数组和字符串遍历的问题

//这是从自定义sql中获取的
varsql=[
"insertinto产品lr(产品id,产品名称)values('",
["94"],//数组的长度不确定
"','",
["DDDfffDDD","DDD盐DDD","DDD海鲜粉DDD","DDD胡椒粉DDD","DDD333DDD"],数组的长度不确定
"','",
"",
"''\n\n)"
]
//最后要得到:(循环插入使用)
[
"insertinto产品lr(产品id,产品名称)values('94','DDDfffDDD')",
"insertinto产品lr(产品id,产品名称)values('94','DDD盐DDD')",
"insertinto产品lr(产品id,产品名称)values('94','DDD海鲜粉DDD')",
"insertinto产品lr(产品id,产品名称)values('94','DDD胡椒粉DDD')",
"insertinto产品lr(产品id,产品名称)values('94','DDD333DDD')"
]
这个该怎么实现?
慕无忌1623718
浏览 414回答 2
2回答

慕码人2483693

//先把sql中所有数组找出来(记录他们的索引号)constindexes=sql.map((t,i)=>Array.isArray(t)?i:-1).filter(i=>i>=0);//由于sql中是数组的元素个数不定(示例中是2个,实际不定)//所以循环层次不能确定,采用递归的方式来完成遍历,//make是个递归函数,每次递归到最后会产生一条结果语句,存入result数组中,//temp是一个临时数组,跟sql一样,只不过在sql中数组的位置保存的其中一个值,//index表示处理到indexes中的哪一个索引了,其在sql中的索引是indexes[index]functionmake(result,temp,index){//结束条件,完成对indexes的遍历,即index超出indexes的有效范围if(index>=indexes.length){//此时temp中每一个原来是数组的位置都保存着一个选出来值,//直接通过join生成SQL语句即可result.push(temp.join(""));//别忘了中止函数return;}constsqlIndex=indexes[index];//sql[sqlIndex]是一组值,遍历这组值,每次填入temp之后进行下一层次的make调用,//即递归调用sql[sqlIndex].forEach(v=>{temp[sqlIndex]=`${v}`;make(result,temp,index+1);});}constresult=[];//用[].concat(sql)从sql复制一个结构相同的数组,//对其元素的改变不会影响到sql(sql作为原始数组需要保持不变)make(result,[].concat(sql),0);console.log(JSON.stringify(result,null,4));在第一个数组中加了83之后的运行结果,跟你需要的结果略有不同,那是因为模板本身的问题["insertinto产品lr(产品id,产品名称)values('94','DDDfffDDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('94','DDD盐DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('94','DDD海鲜粉DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('94','DDD胡椒粉DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('94','DDD333DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('83','DDDfffDDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('83','DDD盐DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('83','DDD海鲜粉DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('83','DDD胡椒粉DDD','''\n\n)","insertinto产品lr(产品id,产品名称)values('83','DDD333DDD','''\n\n)"]

Smart猫小萌

insertinto产品lr(产品id,产品名称,供应商名称,型号)values('94',['DDDfffDDD','DDD盐DDD','DDD海鲜粉DDD','DDD胡椒粉DDD','DDD333DDD'],['fff','盐','海鲜粉','胡椒粉','333'],'DDDfffDDD,DDD盐DDD,DDD海鲜粉DDD,DDD胡椒粉DDD,DDD333DDD')存成这样,然后找到数组,双层for循环即可。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答