我有两个数组,其中一个是答案,第二个是correctAnswers,我需要查看答案中有多少个元素与correctAnswers数组中的元素相同,并获得百分比有多少“答案”是“正确的”。我怎么做? 数组是这样的:如何比较两个数组以查看它们有多少个相同的元素?
answers = ["Hrtkovci","Lepenica","Dec"]
correctAnswers = ["Lepenica","Dec","Leskovac"]
,我不知道这是否是重要的,但一切都与角度。
我有两个数组,其中一个是答案,第二个是correctAnswers,我需要查看答案中有多少个元素与correctAnswers数组中的元素相同,并获得百分比有多少“答案”是“正确的”。我怎么做? 数组是这样的:如何比较两个数组以查看它们有多少个相同的元素?
answers = ["Hrtkovci","Lepenica","Dec"]
correctAnswers = ["Lepenica","Dec","Leskovac"]
,我不知道这是否是重要的,但一切都与角度。
您可以使用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);
});
编辑:对不起,没有看到你想要正确的答案和百分比。更新小提琴。
很简单,你可以循环回答并检查它们。在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++;
}
}
复杂性:2N(answer.length + correctAnswer.length)
array2 = ["Hrtkovci","Lepenica","Dec"]
array1 = ["Lepenica","Dec","Leskovac"]
var foo = [];
var i = 0;
jQuery.grep(array2, function(el) {
if (jQuery.inArray(el, array1) == -1) foo.push(el);
i++;
});
alert(" the difference is " + foo);
有实现这一目标的其他方式。
您可以看到.each
jQuery循环遍历数组并根据您的选择进行比较。
但上述方案是干净的,容易的jQuery是所有这样做对我们来说毕竟:d
你我的变量没有做任何事情。 – sirrocco
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);
它的woorking !!谢谢你! :) – Branka
复杂性是N²,它可以很容易地与2N地图。 –
我低估了什么? – adamjld