正如标题所暗示的那样。我该怎么做呢?
我必须使用纯粹的JS,而且我真的很新(就像真的很新)。请原谅我的noob问题。 :)
我的数组看起来像这样:
var questionArr = [
{
'questionId' : 'Question1',
'question' : 'Q1: How many Objects are there? ',
'choices' : [
{"id" : "10", "tf" : false, "points" : 0},
{'id' : "11", "tf" : false, "points" : 0},
{'id' : "12", "tf" : false, "points" : 0},
{'id' : "15", "tf" : true, "points" : 10},
{'id' : "16", "tf" : false, "points" : 0}
],
'Mchoice' : false,
'completed' : false
},
{
'questionId' : 'Question2',
'question' : 'Q2: some Question will go here? ',
'choices' : [
并且正在进行中。
你可以看到它的测验,我希望得到'完成'的价值。我稍后将值更改为true以检查问题是否已被回答。如果所选的每个问题都至少有答案,则应启用提交按钮。
所以我正在考虑使用forEach循环来检查每个问题的completed是否设置为true或false。
我的forEach看起来像这样,至少它到目前为止。
questionArr.forEach(function(questionId, value){
console.log(questionId, value);
});
我真的很无知我现在应该如何检查这个值,以及我如何从那里开始启用我的按钮。对于按钮,我想到这样的事情,现在这更像是一个可选的问题,但是我知道我是否正朝着正确的方向前进是很好的。
for(l = 0; l < questionArr[questionId].completed ; l++){
if (questionArr[l].completed === true){
button = document.getElementById("button").disabled = false;
}
}
我希望有人可以帮助我。提前谢谢。
答案 0 :(得分:1)
根据您需要支持的浏览器,有两种方法可以实现此目的。
使用forEach,最好的方法是:
var allComplete = true;
questionArr.forEach(function(question, index) {
if(!question.completed)
allComplete = false;
});
// enable/disable your button based on the value of allComplete
您正在将函数传递给forEach
,该函数会为数组中的每个元素调用。该函数最多可以包含三个参数:当前元素,该元素的索引以及正在调用forEach
的数组。我们只对元素本身感兴趣,所以我只能在函数签名中声明它。我给元素的参数命名为question
,因为它就是它的意思;调用下一个index
的原因应该是显而易见的。
但是,如果您需要支持的所有浏览器都支持它,您可以使用Array原型上的every
函数:
var allComplete = questionArr.every(function(question, index) {
return question.completed;
});
// enable/disable your button based on the value of allComplete
答案 1 :(得分:0)
怎么样?
var num = 0,
cnt = questionArr.length;
questionArr.forEach(function(val, i, arr){
if(val.completed) num++;
if(num == cnt) document.getElementById("button").disabled = false;
});
答案 2 :(得分:0)
你非常接近..但你给forEach的功能是不正确的。 函数的签名应该是这样的:
questionArr.forEach(function (item, idx) {});
其中项目是questionArr中的每个项目,而idx是数组中项目的索引。
所以你最终会得到类似的东西:
questionArr.forEach(function (item, idx)
{
if(!item.completed)
{
alert(item.questionId);
}
}
通过一些修改,你应该得到你需要的东西。
答案 3 :(得分:0)
遍历数组中的所有项目,并跟踪所有项目的完成状态,如果其中一项为false,则allCompleted将为false。
var allCompleted = true;
for(l = 0; l < questionArr.length ; l++){
allCompleted = allCompleted && questionArr[l].completed;
}
if (allCompleted) {
document.getElementById("button").disabled = false;
}
答案 4 :(得分:0)
您可以阅读以下对象:
// Here obj is current element and value is index of that element
questionArr.forEach(function(obj, value){
console.log(obj.questionId);
console.log(obj.question);
console.log(obj.Mchoice);
console.log(obj.completed);
});
代表
'choices' : [
{"id" : "10", "tf" : false, "points" : 0},
{'id' : "11", "tf" : false, "points" : 0},
{'id' : "12", "tf" : false, "points" : 0},
{'id' : "15", "tf" : true, "points" : 10},
{'id' : "16", "tf" : false, "points" : 0}
]
你需要再次使用forEach以相同的方式查找值。