如何在JavaScript中结合数组与对象数据生成目标数组?
解决方案:匹配答案ID生成目标数组
实现思路
- 先将所有问题的答案数据转换为答案ID到目标格式字符串的映射,减少重复遍历,提升查找效率
- 遍历存储选中答案ID的数组,通过映射表直接获取对应结果
代码实现
// 示例中的问题对象集合 const questions = [ { id: "Q1", answers: [ { id: "Q1A1", text: "Yes" }, { id: "Q1A2", text: "No" } ] }, { id: "Q2", answers: [ { id: "Q2A1", text: "Test 1" }, { id: "Q2A2", text: "Test 2" }, { id: "Q2A3", text: "Test 3" }, { id: "Q2A4", text: "Test 4" } ] } ]; // 存储选中答案ID的数组 const selectedAnswerIds = ["Q1A1", "Q2A3"]; // 构建答案ID到目标字符串的映射 const answerMap = {}; questions.forEach(question => { question.answers.forEach(answer => { answerMap[answer.id] = `${question.id}_${answer.text.replace(/\s/g, '')}`; }); }); // 生成目标数组 const result = selectedAnswerIds.map(id => answerMap[id]); console.log(result); // 输出: ["Q1_Yes", "Q2_Test3"]
代码说明
- 映射表构建:遍历每个问题的答案,把答案ID作为键,对应的
问题ID_去除空格的答案文本作为值存入对象,后续查找时间复杂度为O(1) - 生成结果:用
map方法遍历选中ID数组,直接从映射表中取值,高效生成目标数组 - 空格处理:用
replace(/\s/g, '')移除答案文本中的空格,保证结果和示例格式一致
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

