JavaScript新手求助:如何将问答字符串转换为指定结构的数组?
解决方法
可以通过正则拆分字符串+数组遍历配对来实现需求,具体步骤如下:
1. 拆分问答字符串为对应数组
利用正则的正向预查特性,把以数字.开头的内容拆分出来,再清理掉多余的序号和空格:
const questions = "1.What is love? 2.1+1 = ? 3. 2+2 = ?"; const answers = "1.Yes 2.2 3.4"; // 拆分问题数组 const questionList = questions .split(/(?=\d+\.)/) // 匹配数字.的位置,在其前方分割 .filter(item => item.trim()) // 过滤空字符串 .map(item => item.replace(/^\d+\.\s*/, "").trim()); // 去掉开头的数字.和空格,清理前后空白 // 拆分答案数组 const answerList = answers .split(/(?=\d+\.)/) .filter(item => item.trim()) .map(item => item.replace(/^\d+\.\s*/, "").trim());
执行后questionList会得到:["What is love?", "1+1 = ?", "2+2 = ?"],answerList得到:["Yes", "2", "4"]
2. 配对生成目标数组
遍历两个数组,将每一组问答封装为对象,再存入数组:
const package = questionList.map((question, index) => { const key = `question${index + 1}`; return { [key]: answerList[index] }; }); console.log(package); // 输出:[{question1: "Yes"}, {question2: "2"}, {question3: "4"}]
补充说明
- 正则
/(?=\d+\.)是正向预查,意思是"找到后面跟着数字+点的位置",这样拆分不会吃掉序号本身,方便后续清理。 - 用
map遍历的时候,通过计算index+1来生成question1这类带序号的键名,用方括号[key]来实现动态对象键名。
内容的提问来源于stack exchange,提问作者baguette
相关产品推荐
相关产品推荐

