Javascript 根据数组检查值并返回另一个值

Javascript 根据数组检查值并返回另一个值,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在构建一个点击类型的游戏,我需要通过将其与数组进行比较来查看用户选择的答案是否正确 这是JSON { quiztitle: "Select the States", correct_answers: "9", states: [ { state_name: "Alabama", image: "alabama_image", answer: "correct" },

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

这是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>
*此处注明姓名*

如果您喜欢
下划线
您可以尝试:

$('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;)的缩写
,这样您就不会试图比较字符串和对象了

您已经掌握了一些方法,但仍有很多工作要做。首先,您不希望按钮中包含文本的jQuery对象;您只需要文本。因此,您可以执行以下操作:

var value = $(this).text();
if ( state.state_name == value && state.correct )
其次。
$.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
    }
});
下面是一个正在工作的JSFIDLE:

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

var value = $(this).text();
if ( state.state_name == value && state.correct )

你得把答案循环一遍

 $('body').on('click', '.matchBtns', function(){
   ...
   var value = this.innerHTML;
   for (var i = 0,l = data.states.length; i< l; i++){
       if (data.states[i].state_name === value && data.states[i].answer === 'correct'){
           /// is correct
           break; // to stop the loop
       }else {
          // not correct, continue
       }
   }
   ...
}
$('body')。在('click','matchBtns',function()上{
...
var value=this.innerHTML;
对于(var i=0,l=data.states.length;i
当前返回的所有答案都是错误的atm@christianvarga@Dale我不小心检查了
状态。请更正
而不是
状态。答案
。我已经解决了这个问题(检查我编辑的答案).在抄袭别人的答案之前,一定要仔细阅读他们的答案,看看你是否能发现这样的问题-这很容易发现,而且你不想养成一种盲目抄袭答案的习惯,希望答案能奏效。很多时候,你需要修改答案以适应你的需要。我在读《我保证》!刚刚在jquery工作&太累了。我感谢你的帮助,这个代码现在起作用了。@Dale哈哈,对不起,伙计,我在那里可能有点粗鲁。我很容易说,当我这么久都在做的时候,很容易发现它:p。不管怎样,很高兴它对你起作用了!