2016-07-20 4 views
0

Ich habe einen Zweifel in einem Skript, wo ich ein Quiz bin. In meinem letzten Quiz habe ich 3 Antwortmöglichkeiten: A, B und C. Wenn die Antwort "A" ist, summiere 3 Punkte für die Option "X", 2 Punkte für die Option "Y" und 1 Punkt für die Option "Z". Wenn die Antwort "B" lautet, summieren Sie 2 Punkte für die Option "X", 3 Punkte für die Option "Y" und 1 Punkt für die Option "Z". Wenn die Antwort "C" lautet, summieren Sie 1 Punkte für die Option "X", 2 Punkte für die Option "Y" und 3 Punkte für die Option "Z".Add Wert im Array und dann True Option

Die Funktion prüft die Punkte der Optionen A, B und C und gibt die Option mit der höchsten Punktzahl zurück.

Aber ich möchte ändern:

Wenn die Antwort "A" 4 Punkte ansammelt. Wenn die Antwort "B" ist, werden 2 Punkte gesammelt. Wenn die Antwort "C" ist, werden 0 Punkte gesammelt.

Wenn die Punktsumme gleich oder kleiner als 10 ist, wird die Option "X" zurückgegeben. Wenn die Punktsumme größer als 10 und kleiner als 24 ist, wird die Option "Y" zurückgegeben. Wenn die Punktsumme größer als 24 ist, wird die Option "Z" zurückgegeben.

Code:

self.jobs = [{ 
    title: 'Opção X', 
    description: 'Descrição Opção X' 
}, { 
    title: 'Opção Y', 
    description: 'Descrição Opção Y' 
}, { 
    title: 'Opção Z', 
    description: 'Descrição Opção Z' 
}]; 

self.job = 9999; 

self.questions = [{ 
    text: 'Pergunta 1', 
    answered: false, 
    skipped: false, 
    answers: [{ 
    text: 'A', 
    selected: false, 
    values: [3, 2, 1] 
    }, { 
    text: 'B', 
    selected: false, 
    values: [2, 3, 1] 
    }, { 
    text: 'C', 
    selected: false, 
    values: [1, 2, 3] 
    }] 
}, { 
    text: 'Pergunta 2', 
    answered: false, 
    skipped: false, 
    answers: [{ 
    text: 'A', 
    selected: false, 
    values: [3, 2, 1] 
    }, { 
    text: 'B', 
    selected: false, 
    values: [2, 3, 1] 
    }, { 
    text: 'C', 
    selected: false, 
    values: [1, 2, 3] 
    }] 
}, { 
    text: 'Pergunta 3', 
    answered: false, 
    skipped: false, 
    answers: [{ 
    text: 'A', 
    selected: false, 
    values: [3, 2, 1] 
    }, { 
    text: 'B', 
    selected: false, 
    values: [2, 3, 1] 
    }, { 
    text: 'C', 
    selected: false, 
    values: [1, 2, 3] 
    }] 
}]; 

self.index = 0; 

self.userAnswers = []; 

self.error = false; 

self.answerQuestion = function(elem) { 
    self.userAnswers[self.index] = elem.answer; 
    self.index = elem.$parent.$index + 1; 

    var question = elem.$parent.question; 
    question.answered = true; 

    angular.forEach(question.answers, function(answer) { 
    answer.selected = false; 
    }); 

    elem.answer.selected = true; 
}; 

self.changeQuestion = function(elem) { 
    var question = self.questions[self.index]; 
    if (question && !question.answered) 
    question.skipped = true; 

    self.index = elem.$index; 
}; 

self.goToResult = function() { 
    var question = self.questions[self.index]; 
    if (question && !question.answered) 
    question.skipped = true; 

    self.index = self.questions.length; 
} 

self.viewResult = function() { 
    var hasError = false; 

    angular.forEach(self.questions, function(question) { 
    if (!question.answered) { 
     hasError = true; 
     question.skipped = true; 
    } 
    }); 

    if (hasError) { 
    self.error = true; 

    $timeout(function() { 
     self.error = false; 
    }, 2000); 

    return false; 
    } 

    self.showQuiz = false; 

    var result = getResult(); 
    self.job = result; 
}; 

getResult = function() { 
var results = [0, 0, 0]; 
var maior = -9999; 
var iMaior = 0; 

angular.forEach(self.userAnswers, function(answer) { 
for (var i = 0; i < self.jobs.length; i++) { 
    results[i] += answer.values[i]; 
} 
}); 

for (var i = 0; i < results.length; i++) { 
var result = results[i]; 
if (result > maior) { 
    maior = result; 
    iMaior = i; 
} 
} 

return iMaior; 
}; 
}]); 
+1

Was haben Sie versucht? Es sieht so aus, als ob die Punkte dem "Werte" -Attribut in jeder Frage entsprechen, also können Sie diese zu "4,2,0" usw. ändern. – Polyov

+0

Ich habe versucht A mit "values: [4, 4, 4]" . Option B auf "Werte [2, 2, 2]". C "-Werte: [0, 0, 0]". Ich kann nicht die Summe und das Ergebnis entsprechend der Bedingung zurückgeben. – Wendell

+0

Das ist verwirrend. Eine Demo-Demo würde helfen. Auch nicht klar, wo Sie speziell ein Problem im Code selbst haben – charlietfl

Antwort

0
var result = getResult(); 

function getResult(){ 
    var totalScore = 0; 
    for (var i = 0; i < self.userAnswers.length; i++) { 
     totalScore += self.userAnswers[i].values[0]; // assuming "values" is an array of equal values: [4,4,4],[2,2,2] or [0,0,0] 
    } 
    if(totalScore <= 10){ 
     return self.jobs[0] 
    } else if (totalScore < 24) { 
     return self.jobs[1] 
    } else { 
     return self.jobs[2] 
    } 
} 
+0

Ich habe Ihren Code durch Ersetzen der folgenden Zeilen eingefügt: 'var result = getResult(); \t \t self.job = Ergebnis; \t}; 'und vor'}]); 'aber der Bildschirm wurde weiß, als er das Ergebnis bekam. – Wendell

+0

@Wendell - Eine Idea-Ära, die eine logische und aplicar no seu codigo, nao copiar e colar. Eu reescrevi sua funcao 'getResult', ein Verificar cada resposta, ein somar o valor in 'totalScore', kein fim verifica o valor total e retorna um dos tres jobs. Era ist que vc queria fazer? –

+0

é exatamente ist in der Regel fazer. Acredito que non precisava de nenhuma modificação. Porém nicht funcionou. Eu tenho experiência intermediária in PHP, Javascript ist kostenlos. – Wendell