我试图迭代一个内部有许多较小对象的对象。我想有条件地在每个较小的对象中插入一个键值对 例如:
const answers = {
"question1": {
answer: "Poor",
metric: "focus"
},
"question2": {
answer: {agree: "yes", duration: "10"}
metric: "exercise"
}
}
因此,假设问题 1 的答案可以是差、好或优秀,差等于 1 分,好等于 5 分,优秀等于 10 分。 根据问题 1 中的答案,我想添加一个键值对,如 Score: 1 到问题 1 对象中
然后对于问题 2,我们查看持续时间,持续时间 10 给我们 10 分 所以我们插入键值对,如分数:10
所以最后我想返回一个看起来像这样的对象:
newAnswers = {
"question1": {
answer: "Poor",
metric: "focus",
score: 1
},
"question2": {
answer: {agree: "yes", duration: "10"}
metric: "exercise",
score: 10
}
}
在这个例子中,为了简单起见,我只显示了两个问题,但实际上可能有很多问题,并且相同的逻辑将适用于所有其他问题。
提前致谢
基本上你需要的是循环逻辑
这样的事情会有帮助。
逻辑
answer
键的类型"poor", "good", "excellent"
选项之间进行映射。duration
的有效性并将其分配给分数。工作小提琴
const answers = {
"question1": {
answer: "Poor",
metric: "focus"
},
"question2": {
answer: {agree: "yes", duration: "10"},
metric: "exercise"
}
};
Object.entries(answers).forEach((item) => {
const answer = item[1].answer;
switch (typeof answer) {
case "string":
console.log(answer);
const answerOptions = ["poor", "good", "excellent"];
const scoreOptions = [1, 5, 10];
const index = answerOptions.indexOf(answer.toLowerCase());
if(index !== -1) {
item[1].score = scoreOptions[index];
}
break;
case "object":
if (answer.duration && !isNaN(answer.duration)) {
item[1].score = +answer.duration;
}
break;
}
});
console.log(answers)