Разрабатываю приложение типа викторины с вопросами. Не могу решить задачу или решаю ее очень криво. Есть два массива:
Ответы пользователя:
0:{questionId: "1", answerId: "1"}
1:{questionId: "2", answerId: "4"}
2:{questionId: "2", answerId: "6"}
3:{questionId: "3", answerId: "8"}
И правильные ответы:
0:{questionId: "1", answerId: "3"}
1:{questionId: "2", answerId: "4"}
2:{questionId: "2", answerId: "6"}
3:{questionId: "3", answerId: "7"}
Мне нужно сравнить два массива и получить нечто подобное:
0:{questionId: "1", result: false} \\ пользователь дал не правильный ответ
1:{questionId: "2", result: true} \\ пользователь дал правильный ответ по
второму вопросу, в нем два варианта
ответа оба совпали. Иначе false если
один из ответов не верен
2:{questionId: "3", result: false} \\ пользователь дал не правильный ответ
Не получается у меня никак этот сделать. Как решить эту задачу?
Моё решение:
@section scripts {
<script>
$(document).ready(function () {
let userAnswers = [];
let answers = [];
$('#checkResultBtn').click(function () {
$('input:checked', '.card-body').each(function () {
userAnswers.push({
questionId: $(this).attr('name'),
answerId: $(this).val()
});
});
console.log(userAnswers);
console.log(answers);
diff(userAnswers, answers);
});
function diff(userAnswers, answers) {
userAnswers.forEach(function (userAns) {
answers.forEach(function (ans) {
if (userAns['questionId'] == ans['questionId']) {
if (userAns['answerId'] == ans['answerId'])
console.log(true)
else
console.log(false)
}
});
});
}
@foreach(var answers in Model){
var answersList = answers.Answers.Where(x => x.Answer == 1);
foreach(var answer in @answersList)
{
<text>
answers.push({
questionId: '@answer.QuestionId',
answerId: '@answer.Id'
});
</text>
}
}
});
</script>
}
https://pastebin.com/B2K5z9UX
P. S.
Стоит учесть, что массив со стороны пользователя может по длине не совпадать с массивом правильных ответов.
Пользователь может не ответить на вопрос вообще.
var ans = [
{questionId: "1", answerId: "1"},
{questionId: "2", answerId: "4"},
{questionId: "2", answerId: "6"},
{questionId: "3", answerId: "8"},
];
var keys = [
{questionId: "1", answerId: "3"},
{questionId: "2", answerId: "4"},
{questionId: "2", answerId: "6"},
{questionId: "3", answerId: "7"},
];
var keys2 = Object.create(null);
for (var x of keys) {
(keys2[x.questionId] = keys2[x.questionId] || []).push(x.answerId);
}
for (var x of Object.keys(keys2)) {
keys2[x].sort();
}
var ans2 = Object.create(null);
var res = [];
for (var x of ans) {
(ans2[x.questionId] = ans2[x.questionId] || []).push(x.answerId);
}
for (var x of Object.keys(ans2)) {
res.push({questionId: x, result: ans2[x].sort() + '' == keys2[x]});
}
console.log(res);
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
let userAnswers = {
1: [1],
2: [4, 6],
3: [8]
};
let rightAnswers = {
1: [3],
2: [4, 6],
3: [7],
10: [9, 8]
};
console.info(diff());
function diff() {
let result = {};
for(let [qID, answers] of Object.entries(rightAnswers)){
result[qID] = qID in userAnswers ? userAnswers[qID].length === answers.length && userAnswers[qID].every((v, i)=> v === answers[i]) : false;
}
return result;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
При добавлении информации с формы на русском языке в БД высвечиваются непонятные символы
как сделать POST запрос с логином и паролем, и после чего сделать get ?
С сервера не приходит ответ, в чем может быть проблема? При этом запрос он видит