【发布时间】:2017-03-17 16:44:17
【问题描述】:
在 Javascript 调查的背景下,我有以下数据结构。
quest_1: {
quest: 'Question',
answers: [
{text: 'answer 1', active: false, multiple: false},
{text: 'answer 2', active: false, multiple: false},
{text: 'answer 3', active: false, multiple: false},
{text: 'answer 4', active: false, multiple: false},
],
choice: [],
},
...
程序在 userEvents 的过程中操纵这个活动状态(点击一个答案)。 为了保存当前的用户选择,我有以下方法通过上面的数据结构(答案数组)进行循环:
pushAnswer(answers, target){
for (let i = 0; i < answers.length; i++) {
console.log(answers[i].active);
if(answers.active === true){
target.push(answers.text);
} else{
console.log('error');
}
}
}
此方法仅在用户做出选择后运行,数据结构的console.log 在单击答案后显示活动状态true(目标参数是另一个用于保存答案的数组(单-和多项选择))。
我的问题:上面的 for 循环在每次迭代中只给出一个 false。
我尝试了几种变体,在循环内使用let 声明变量,但它不起作用。我无法弄清楚问题出在哪里,我可以想象,挑战是这个数组中的对象。
--编辑--
感谢您的信息,我尝试在语句中添加索引,但无法达到活动状态。
修改代码:
pushAnswer(answers, target){
for (let i = 0; i < answers.length; i++) {
console.log(answers[i].active);
console.log(answers[i]);
if(answers[i].active == true){
target.push(answers[i].text);
} else{
console.log('error');
}
} }
在下图中,您可以看到objects 内部array 和数组内部的数据结构。
关注 3. object(Answer) 第一个 console.log 显示 false,Array 显示 true。
为什么我无法在我的语句中达到这些对象的活动状态?
我希望任何人都可以给我一个方法提示。 提前致谢。
【问题讨论】:
-
您缺少
answers.active和answers.text中的数组索引。替换为answers[i].active等... -
感谢您的回答。我试图更改声明并编辑了我的问题。也许你可以检查我的 console.log 图像。提前致谢。
-
我刚刚在一系列 4 个问题上运行了您修改后的
pushAnswer,其中第 3 个问题处于活动状态。它工作得很好。我假设您在周围的代码中有错误,例如仅在调用pushAnswer之后设置active = true(这仍会导致您向我们展示的控制台输出)。 -
感谢您提供更多信息,问题出在周围的代码中...现在可以使用了!
标签: javascript arrays object for-loop