2016-07-20 4 views
0

私はクイズを行っているスクリプトで疑いがあります。私の最後のクイズでは、答えが「A」の場合はA、B、Cの3つの答えがあり、「X」の場合は3点、「Y」の場合は2点、「Z」の場合は1点です。答えが「B」の場合、オプション「X」に対して2ポイント、「Y」オプションに3ポイント、「Z」オプションに1ポイントを合計します。答えが「C」の場合、オプション「X」に対して1ポイント、「Y」オプションに2ポイント、「Z」オプションに3ポイントが加算されます。配列に値を追加してからtrueオプションを返します。

この関数は、オプションA、B、Cのポイントをチェックし、最高のポイント数を持つオプションを返します。

しかし、私は変更したい:

の答えは、 "A" は4ポイントを蓄積している場合。答えが「B」の場合、2点が累積されます。答えが "C"の場合、0点が累積されます。

合計が10点以下の場合は、「X」オプションを返します。ポイントの合計が10を超え、24未満の場合は「Y」オプションが返されます。ポイントの合計が24を超える場合、「Z」オプションが返されます。

コード:

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

あなたは何を試してみましたか?ポイントは各質問の 'values'属性に対応しているようですので、それらを「4,2,0」などに変更することができます。 – Polyov

+0

「値:[4,4,4]」でAにしようとしました。オプションBを「値[2,2,2]」にする。 C "値:[0、0、0]"である。 私は合計を行い、条件に従って結果を返しません。 – Wendell

+0

これは混乱します。プランナーデモが役に立ちます。また、コード自体に問題が特にどこにあるのか明確ではありません – charlietfl

答えて

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

私はあなたのコードを置き換えて、後にある行を置き換えます: 'var result = getResult(); \t \t self.job = result; \t}; 'の前に}});'しかし、結果を得ると画面が白くなりました。 – Wendell

+0

@ウィンデル - アイデアの時代には、ロゴのコピーやコピーはできません。 Eu reescrevi sua funcao 'getResult'、妥当性確認、評価、全体的な評価を行っています。 Era isso que vc queria fazer? –

+0

éexatamente isso que quero fazer。訓練を受けた人は、訓練を受けていません。 Porémnãofuncionou。 Eu tenhoの経験仲介php、mas javascriptのようなものです。 – Wendell

関連する問題