是否可以将下面的函数CorrectAppleNo
、WrongAppleNo1
、WrongAppleNo2
和WrongAppleNo3
组合为一个函数,以便根据构造函数的位置返回适当的值?或者有更好的方法吗?
比如说,如果我从构造函数中的Answer1位置调用函数,它会返回正确的答案,如果我在构造函数的Answer2位置调用相同的函数,则会返回错误的答案。
我之所以这么问,是因为如果说有20个独特的解决方案存在问题,那么将这些函数分别键入return correct return error将是一个令人头疼的问题。我对javascript还是有点陌生,所以如果问题是基本的,我很抱歉!
var paper = [];
paper[0] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[1] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[2] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[3] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[4] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
paper[5] = new NewQues(`If Person has a total of 1000 Apples. And he gives ${AppleNo()} to Bill. How many apples does he have remaining`, `${CorrectAppleNo()}`, `${WrongAppleNo1()}`, `${WrongAppleNo2()}`, `${WrongAppleNo3()}`);
function AppleNo() {
var Apples = Math.floor(Math.random() * 400);
SendApples = Apples;
return Apples;
}
function CorrectAppleNo() {
var Temporary = SendApples;
var Correct = 1000 - Temporary;
return Correct;
}
function WrongAppleNo1() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary - somenumber;
return Wrong;
}
function WrongAppleNo2() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary + somenumber;
return Wrong;
}
function WrongAppleNo3() {
var somenumber = Math.floor(Math.random() * 20);
var Temporary = SendApples;
var Wrong = 1000 - Temporary - somenumber;
return Wrong;
}
// Functions Regarding Questions Above , Code Below
function NewQues(Ques, Answer1, Answer2, Answer3, Answer4) {
this.Ques = Ques;
this.Answer1 = Answer1;
this.Answer2 = Answer2;
this.Answer3 = Answer3;
this.Answer4 = Answer4;
};
function Change() {
var somenumber = Math.floor(Math.random() * paper.length);
SomeQues = paper[somenumber];
answers = [SomeQues.Ques, SomeQues.Answer1, SomeQues.Answer2, SomeQues.Answer3, SomeQues.Answer4];
document.getElementById("question").innerHTML = answers[0];
document.getElementById("question").value = answers[0];
document.getElementById("answer1").innerHTML = answers[1];
document.getElementById("answer1").value = answers[1];
document.getElementById("answer2").innerHTML = answers[2];
document.getElementById("answer2").value = answers[2];
document.getElementById("answer3").innerHTML = answers[3];
document.getElementById("answer3").value = answers[3];
document.getElementById("answer4").innerHTML = answers[4];
document.getElementById("answer4").value = answers[4];
}
<p id="question"> Question </p>
<p id="answer1"> Answer1 </p>
<p id="answer2"> Answer2 </p>
<p id="answer3"> Answer3 </p>
<p id="answer4"> Answer4 </p>
<button onclick="Change()"> Change Question </button>
我不明白这个问题,但我想我现在正在看你的答案。
一些建议/观察:
- 如果无论
x
是1
、2
还是3
,结果都相同,请不要重复代码,使用||
("或"(操作 - 代码应该处理
x
不是0
、1
、2
或3
的情况,即使您总是期望它是(如果您总是期望是,则可以处理错误( - JavaScript中非常非常标准的约定是,变量和非构造函数函数以小写字母开头。当然,您可以在自己的代码中使用任何您喜欢的约定,但如果与他人合作(例如,在Stack Overflow上提问或提供答案(,以下约定会使人们更容易理解您的代码
- 在现代JavaScript中,不要使用
var
。使用const
或let
- 命名的一致性很重要。如果使用
camelCase
(或非标准的UpperCamelCase
(,请始终使用它。例如,没有SendApples
和somenumber
。按照惯例,它们将是sendApples
和someNumber
- 不要将块上的第一个语句与块的开头
{
放在同一行,从而隐藏它。它很难阅读,也很难维护(如果你需要在它之前添加一个声明怎么办?( - 不要把块的末尾放在块中最后一条语句的末尾来隐藏它。同样,它很难阅读,也很难维护(如果你需要在它后面添加一个语句怎么办?(
诚然,后两种风格有点主观,但尽管{
和}
的走向有几种常见的风格,但它们都没有像那样隐藏它们。(我最近才看到这个——我希望一些有影响力的老师不会教这个。(
考虑到所有这些:
function correctAppleNo(x) {
if (x === 0) {
const right = 1000 - sendApples;
return right;
}
if (x === 1 || x === 2 || x === 3) {
const someNumber = Math.floor(Math.random() * 20);
const wrong = 1000 - sendApples - someNumber;
return wrong;
}
throw new Error(`'x' is expected to be 0, 1, 2, or 3, but got the value ${x}`);
}
这是一个直截了当的答案,我应该早些时候使用Arguments来尝试。
function CorrectAppleNo(x) {
if ( x == 0 ) {
var Correct = 1000 - SendApples ;
return Correct ;}
if ( x == 1 ) {var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples - somenumber ;
return Wrong ;}
if ( x == 2) { var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples - somenumber ;
return Wrong ;}
if ( x == 3) { var somenumber = Math.floor(Math.random() * 20);
var Wrong = 1000 - SendApples + somenumber ;
return Wrong ;}
}