检查两个数组的值是否相等

时间:2014-01-26 12:58:14

标签: jquery arrays

我需要一个非常简单的知识检查'这应该将选定的答案与正确答案进行比较。我将正确的答案放入一个数组中,并将所选答案放入另一个数组中:

$(".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/

2 个答案:

答案 0 :(得分:4)

尝试

$(".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

答案 1 :(得分: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