检查数组的值并返回另一个值

时间:2015-07-26 23:25:39

标签: javascript jquery arrays json

我正在构建一个点击式游戏,我需要通过将它与数组进行比较来查看用户选择的答案是否正确。

这是JSON

    {
     quiztitle: "Select the States",
     correct_answers: "9",
     states: [
       {
        state_name: "Alabama",
        image: "alabama_image",
        answer: "correct"
       },

       {
        state_name: "Alberta",
        image: "alberta_image",
        answer: "incorrect"
       },
ect...

当用户点击按钮时,它会获取值并需要检查它是否正确。什么是最好的方法。

这是我到目前为止的尝试:

 $('body').on('click', '.matchBtns', function(){
                    var value = $(this.innerHTML);
                    if($.inArray(value, data.states)){
                       //its in the array
                       }else{
                         //its not
                         }
            });

我不确定如何访问值'answer'以检查是否正确

这是html按钮

<button class="matchBtns">*State Name Here*</button>

3 个答案:

答案 0 :(得分:2)

你已经有了一些方法,但还有很多工作要做。首先,您不希望按钮内的文本的jQuery对象;你只想要文字。所以你可以这样做:

var value = $(this).text();

其次。 $.inArray因两个原因无效。一 - 它是一个多维的对象数组。二 - 你不只是想检查它是否在阵列中;你想检查它是否在数组具有正确的属性。

因此,您可以遍历数组并查看是否有任何答案是正确的:

$('body').on('click', '.matchBtns', function() {
    var value = $(this).text();
    var correct = false;

    $.each(data.states, function(i, state) {
        if ( state.state_name == value && state.answer == 'correct' ) {
            correct = true;
            return false; // break out of $.each()
        }
    });

    if ( correct ) {
        // true
    }
    else {
        // false
    }
});

这是一个有效的jsFiddle:https://jsfiddle.net/s0gtqjcL/

您可以通过将answer(或correct)存储为布尔值而非字符串来简化此操作。这样,你可以这样做:

if ( state.state_name == value && state.correct )

答案 1 :(得分:0)

如果您喜欢underscore,可以尝试:

$('body').on('click', '.matchBtns', function(){
                    var value = $(this.innerHTML);
                    if(_.contains(_.pluck(data.states, "answer"), value)) {
                       //is in the array
                       }
                     else{
                         //is not
                      }
            });

_.pluck(array, "x")_.map(array, function(x){return x.x;)的简写,因此您不会尝试比较字符串和对象

答案 2 :(得分:0)

你将不得不循环回答。

regionCode