2014-01-26 111 views
1

我需要一个非常简单的“知识检查”,它应该将所选答案与正确答案进行比较。我把正确答案到一个数组,并且所选答案到另一个数组:检查两个数组的值是否相等

$(".kc_submit_1").click(function() { 

     var correctAnswers = ['true','true','true','true','true']; 
     var allAnswers = []; 

     $('.kc_answer').each(function() { 
       allAnswers.push($(this).val()); 
     }); 

     if (allAnswers==correctAnswers) { 
      alert ('Yahtzee'); 
     }; 

}) 

的问题是,我从来没有得到的Yahtzee。 IF函数从来就不是真的,如果你点击所有项目,它应该是。

小提琴http://jsfiddle.net/dN6vt/

+1

要检查你必须在遍历所有元素阵列平等。否则,它会检查它们是否是完全相同的数组对象。 – Dave

+0

我将如何迭代? –

+0

使用此解决方案http://stackoverflow.com/a/14853974/1561971 –

回答

3

尝试

$(".kc_submit_1").click(function() { 
    var correctAnswers = ['true', 'true', 'true', 'true', 'true']; 
    var allAnswers = $('.kc_answer').map(function (i) { 
     return correctAnswers[i] == this.value ? this.value : undefined; 
    }); 
    //alert (correctAnswers); 
    //alert (allAnswers); 
    if (allAnswers.length == correctAnswers.length) { 
     alert('Yahtzee'); 
    }; 

}) 

演示:Fiddle

+0

我爱StackOverflow,非常感谢您的帮助! –

2

你需要通过一个循环做到这一点,因为数组是在JavaScript对象和不同的对象有不同的对象ID,这意味着JavaScript的将永远不会承认他们是平等的。为了使这个特定的脚本的工作,你可以做到以下几点:

$(".kc_submit_1").click(function() { 

    var correctAnswers = ['true','true','true','true','true']; 
    var allAnswers = []; 
    var wrongAnswers = []; 

    $('.kc_answer').each(function() { 
     currInd = allAnswers.length; 
     allAnswers.push($(this).val()); 
     if (allAnswers[currInd] != correctAnswers[currInd]) 
      wrongAnswers[currInd] = $(this).val(); 
    }); 

    if (wrongAnswers.length) { 
     alert ('Yahtzee'); 
    }; 

}) 

在任何其他情况下,你可以只使用一个函数像这样的:

function compareArray(arr1, arr2) { 
    var clone2 = arr2.slice(0); 
    var difflen = 0; 
    for (var i=0;i<arr2.length;i++) { 
     if (i in arr1 && arr1[i] == arr2[i]) { 
      clone2[i] = undefined; 
     } else { 
      difflen++; 
     } 
    } 
    clone2.len = difflen; 
    return clone2; 
} 

这个函数会返回一个数组所有数组2中的值不等于数组1中的值。要获得差异量,您需要执行compareArray(arr1, arr2).len

相关问题