如何使用forEach从数组中获取特定值

时间:2014-08-26 08:08:59

标签: javascript

正如标题所暗示的那样。我该怎么做呢?

我必须使用纯粹的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;
        }
    }

我希望有人可以帮助我。提前谢谢。

5 个答案:

答案 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以相同的方式查找值。