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