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

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

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

慕无忌1623718 2019-05-08 12:07:17
//这是从自定义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')"]这个该怎么实现?
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

//先把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)"
]
                            
查看完整回答
反对 回复 2019-05-08
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

insertinto产品lr(产品id,产品名称,供应商名称,型号)values('94',['DDDfffDDD','DDD盐DDD','DDD海鲜粉DDD','DDD胡椒粉DDD','DDD333DDD'],['fff','盐','海鲜粉','胡椒粉','333'],'DDDfffDDD,DDD盐DDD,DDD海鲜粉DDD,DDD胡椒粉DDD,DDD333DDD')
存成这样,然后找到数组,双层for循环即可。
                            
查看完整回答
反对 回复 2019-05-08
  • 2 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

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