基于父级值在嵌套数组中添加新键值对
问题描述
我有一个包含问题的数组,每个问题对象里有可选选项列表和正确答案字符串。我需要给每个选项对象添加一个correct_answer字段,用true/false标记该选项是否为正确答案。尝试使用.map()和.forEach()方法,但不知道如何在处理选项时访问对应的正确答案值。
原数据
const data = [ { "question": "数学常数e的近似值是多少?", "options": [ { "option": "1.41", }, { "option": "1.62", }, { "option": "2.72", }, { "option": "3.14", } ], "correct_answer": "2.72" }, { "question": "动画《一拳超人》的主角叫什么名字?", "options": [ { "option": "杰诺斯", }, { "option": "KING", }, { "option": "埼玉", }, { "option": "索尼克", } ], "correct_answer": "埼玉" } ]
期望结果
const data = [ { "question": "数学常数e的近似值是多少?", "options": [ { "option": "1.41", "correct_answer": false, }, { "option": "1.62", "correct_answer": false, }, { "option": "2.72", "correct_answer": true, }, { "option": "3.14", "correct_answer": false, } ], "correct_answer": "2.72" }, { "question": "动画《一拳超人》的主角叫什么名字?", "options": [ { "option": "杰诺斯", "correct_answer": false, }, { "option": "KING", "correct_answer": false, }, { "option": "埼玉", "correct_answer": true, }, { "option": "索尼克", "correct_answer": false, } ], "correct_answer": "埼玉" } ]
解决方案
方法1:使用.forEach()修改原数组
.forEach()会直接遍历并修改原数组元素,适合不需要保留原数据的场景:
data.forEach(question => { const correctAnswer = question.correct_answer; question.options.forEach(option => { option.correct_answer = option.option === correctAnswer; }); });
方法2:使用.map()返回新数组
如果需要保留原数组不变,用.map()生成新数组,所有对象均为浅拷贝后的新实例:
const newData = data.map(question => ({ ...question, options: question.options.map(option => ({ ...option, correct_answer: option.option === question.correct_answer })) }));
核心逻辑说明
遍历每个问题时,直接访问当前问题的correct_answer属性,再遍历该问题的options数组,将每个选项的option值与正确答案做全等比较,把结果赋值给新添加的correct_answer字段即可。
内容的提问来源于stack exchange,提问作者Nivel
相关产品推荐
相关产品推荐

