2016-10-24 4 views
0

객관식 퀴즈를 만들었습니다. 일부 질문에는 하나의 정답 (라디오 입력 사용)이 있고 다른 질문에는 여러 개의 정답 (확인란)이 있습니다.제출 된 퀴즈 응답의 배열과 자바 스크립트의 정답 배열을 비교하는 방법

사용자가 퀴즈를 제출하면 체크 된 라디오 상자와 확인란을 모두 수집하고 대답 ID를 서버로 향하는 배열로 푸시합니다. 그것은 다음과 같습니다

userAnswers = [ '1c', '2d', '3a', '3b', '3c', '3d', '4b', '5c', '5d', '6d', '7c', '7d' ]

을 나는 모든 정답의 배열을 가지고있는 서버.

correctAnswers = [ '1c', '2d', '3b', '3d', '4b', '5a', '5d', '6d', '7c', '7d' ]

내가 배열을 비교하는 밑줄의 _.difference 기능을 사용하여 시도했지만 그것이 나에게 완전한 비교를 제공하지 않습니다.

누구나 내가이 퀴즈를 채점하는 방법을 고안하도록 도울 수 있습니까? 나는 문제의 일부가 여러 답을 가지고 기술적으로 누군가가 4 개의 체크 박스 모두를 체크 할 수 있다고 생각한다. 그렇지 않으면 그것을 비교하기가 더 어렵다.

어쩌면 배열을 사용하는 것이 최선의 방법이 아니므로 어떤 제안이라도 환영합니다!

+0

여러 답변을 처리 할 수있는 배열지도를 만들 수 있습니다. – maioman

+0

답장을 보내 주셔서 감사합니다. 의미가 무엇이고 어떻게 할 수 있습니까? 감사합니다 – Sean

+0

일부 샘플 코드를 게시하십시오 – maioman

답변

1

어쩌면 사용하여 배열 할 수있는 가장 좋은 방법이 아니다이

예, 정말이에 대한 적절한 데이터 구조를 사용해야합니다

answers = [ 
    ['c'], // 1 
    ['d'], // 2 
    ['a', 'b', 'c', 'd'], // 3 
    ['b'], // 4 
    ['c', 'd'], // 5 
    ['d'], // 6 
    ['c', 'd'] // 7 
] 

또한 객체를 사용할 수를 "명명 된"질문 (인덱싱 대신)을 사용하고, 객관식 질문에 대한 배열 래퍼를 삭제할 수 있습니다. 그러나 여기에서는 단순성 때문에 배열을 주장합니다.

원본 형식을 입력으로 사용하려는 경우 (예 : 입력하기가 쉽거나 서버가 URL 쿼리 매개 변수를 중첩하지 못하기 때문에) 중첩 된 배열로 쉽게 변환 할 수 있습니다.

결과를 올바른 답과 비교하는 것은 간단합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다! 네가 완전히 옳다. 당신이 제안하는 데이터 구조가 훨씬 낫다. 코드 조정에 나를 도와 줄 수 있습니까? 그것은 현재의 : '''selectedAnswers의 =은 [], \t \t \t 답변 = $하자 (':이 옵션을 선택, 입력 [입력 = 확인란] : 입력 [유형 = 라디오] 확인'); 위한 \t \t VAR (I = 0, II = answers.length; 나는 II <; I ++) { \t \t selectedAnswers.push (답변 [I] .getAttribute ("ID")); \t \t}''' – Sean

+0

@Zauber 당신은 (마크 업/마크 업 세대 스크립트를 보여주기 위해) [새로운 질문을하기] (http://stackoverflow.com/questions/ask)를 원할 수도 있지만 힌트를 줘. 해당 형식으로 ID가 필요하면'answers [i]를 사용할 수 있습니다.질문의 색인에 대해 id [0] -1', 선택 항목에 대해'answers [i] .id.slice (1)'(if (selectedAnswers의 색인) selectedAnswers [index] .push (선택 사항) else selectedAnswers [index] = [choice]')하지만 실제로는 마크 업을 변경하고 인덱스에 대한 입력의'name' 속성과 선택 항목에 대한'value' 속성을 사용하는 것이 좋습니다. – Bergi

+0

예. 지금까지 도움을 주셔서 감사합니다! – Sean