Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较两个数组以查看它们有多少相同的元素?_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 如何比较两个数组以查看它们有多少相同的元素?

Javascript 如何比较两个数组以查看它们有多少相同的元素?,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有两个数组,一个是answers,第二个是correctAnswers,我需要查看answers中有多少元素与correctAnswers数组中的元素相同,并获得百分比,即有多少“答案”是“正确的”。我该怎么做? 阵列是这样的: answers = ["Hrtkovci","Lepenica","Dec"] correctAnswers = ["Lepenica","Dec","Leskovac"] 我不知道这是否重要,但一切都是有角度的。很简单,你可以循环回答并检查它们。对于forE

我有两个数组,一个是answers,第二个是correctAnswers,我需要查看answers中有多少元素与correctAnswers数组中的元素相同,并获得百分比,即有多少“答案”是“正确的”。我该怎么做? 阵列是这样的:

 answers = ["Hrtkovci","Lepenica","Dec"]

 correctAnswers = ["Lepenica","Dec","Leskovac"]

我不知道这是否重要,但一切都是有角度的。

很简单,你可以循环回答并检查它们。对于forEach循环,它将是:

var nbGoodAnswer = 0;
answers.forEach(function(answer, index, listAnswer){
    if(answer === correctAnswers[index]){
        nbGoodAnswer++;
    }
});
(也可以用一个简单的
for
来完成)

然后:

console.log(nbGoodAnswer + " / " + answers.length +" bonnes réponses");
console.log((nbGoodAnswer / answers.length * 100) +"% bonnes réponses");
编辑:在另一种情况下,如果您的答案数组没有排序,或者可能不包含所有问题的答案:

var answer = [{question: 3, response: "C"}, {question: 1, response: "A"}];
var correctAnswer = [{question: 1, response: "A"}, {question: 2, response: "B"}, {question: 3, response: "C"}, {question: 4, response: "D"}];

var mapCorrectAnswerIdQuestion = {};
for ( var i = 0; i < correctAnswer.length; i++ ) {
    mapCorrectAnswerIdQuestion[correctAnswer[i].question] = correctAnswer[i].response;
}

// then you count
var nbGoodAnswer = 0;
for ( var j = 0; j < answer.length; j++ ) {
    if(answer[j].response === mapCorrectAnswerIdQuestion[answer[j].question]){
        nbGoodAnswer++;
    }
}
var-answer=[{问题:3,回答:“C”},{问题:1,回答:“A”}];
var correctAnswer=[{问题:1,回答:“A”},{问题:2,回答:“B”},{问题:3,回答:“C”},{问题:4,回答:“D”}];
var mapCorrectAnswerIdQuestion={};
对于(变量i=0;i
复杂性:2N(answer.length+correctAnswer.length)

还有其他方法可以实现这一点

您可以查看
。每个
jQuery循环遍历数组,并根据您的选择进行比较


但是上面的解决方案是干净而简单的,因为jQuery毕竟为我们做了这一切:D

您可以使用angular.forEach检查两个数组中的每个项,并检查它们是否相等

var app = angular.module('app', [])
app.controller('MyController', function ($scope) {

    $scope.answers = ["Hrtkovci", "Lepenica", "Dec"];
    $scope.correctAnswers = ["Lepenica", "Dec", "Leskovac"];

    $scope.compareArrays = function (arr1, arr2) {
        var inBoth = [];
        angular.forEach(arr1, function (a1) {
            angular.forEach(arr2, function (a2) {
                if (a1 == a2) {
                    inBoth.push(a1);
                }
            });
        });
        //return inBoth;
        var correct = 'You got ' + inBoth.length + '/' + arr2.length + ' answers!';
        var percentage = 'Correct: ' + ((inBoth.length / arr2.length) * 100).toFixed(2) + '%';
        alert(correct + '\n' + percentage);
    };

    $scope.compareArrays($scope.answers, $scope.correctAnswers);

});
编辑:抱歉,没有看到您想要正确答案和百分比。更新的小提琴

试试这个
这假设数组相等,并且它们的顺序完全相同。你必须对每个问题/回答有一个正确的答案。他可以有一个问题列表,用户只能回答其中的一些问题。或者用户可能会以不同的顺序回答。。首先是问题2,然后是问题1。。。这些问题可能会随机出现。等等。很多事情可能会有所不同,你做了太多的假设,所以你不会像布兰卡说的那样列出字符串,因为你需要确定问题。您必须列出包含id和答案的对象。我将修改我的答案。你的I变量没有做任何事情。因为每个人都至少有一个问题是对的?您可能会向用户显示:“正确答案:0比率:无限%”-这是预期结果吗?您将答案与正确答案混淆。正确答案是基数,这不是一个空数组,因为它毫无意义。它的呜呜声!!谢谢你!!:)复杂度是N²,用一张地图很容易就变成2N。
var app = angular.module('app', [])
app.controller('MyController', function ($scope) {

    $scope.answers = ["Hrtkovci", "Lepenica", "Dec"];
    $scope.correctAnswers = ["Lepenica", "Dec", "Leskovac"];

    $scope.compareArrays = function (arr1, arr2) {
        var inBoth = [];
        angular.forEach(arr1, function (a1) {
            angular.forEach(arr2, function (a2) {
                if (a1 == a2) {
                    inBoth.push(a1);
                }
            });
        });
        //return inBoth;
        var correct = 'You got ' + inBoth.length + '/' + arr2.length + ' answers!';
        var percentage = 'Correct: ' + ((inBoth.length / arr2.length) * 100).toFixed(2) + '%';
        alert(correct + '\n' + percentage);
    };

    $scope.compareArrays($scope.answers, $scope.correctAnswers);

});
var answers = ["Hrtkovci", "Lepenica", "Dec"],
    correctAnswers = ["Lepenica", "Dec", "Leskovac"],
    count = 0,
    percent;
correctAnswers.forEach(function (c) {
    if (answers.some(function (a) { return a === c; })) {
        count++;
    }
});
percent = count * 100 / correctAnswers.length;
document.write('Right Answers: '+count + ' Rate: ' + percent.toFixed(2) + ' %');
$answers =array("a"=>"Hrtkovci","b"=>"Lepenica","c"=>"Dec");

$correctAnswers =array("e"=>"Lepenica","f"=>"Dec","g"=>"Leskovac");

$result=array_intersect($answers ,$correctAnswers );

print_r($result);