Javascript 如何使用Fisher-Yates shuffle在TypeScript中洗牌数组?
我想用打字脚本编写一个测验。提出的问题应该是随机选择的,我使用Fisher-Yates Shuffle来做到这一点——但它不会洗牌 我做错了什么?费舍尔·耶茨的洗牌出现在问题之后Javascript 如何使用Fisher-Yates shuffle在TypeScript中洗牌数组?,javascript,typescript,algorithm,shuffle,fisher-yates-shuffle,Javascript,Typescript,Algorithm,Shuffle,Fisher Yates Shuffle,我想用打字脚本编写一个测验。提出的问题应该是随机选择的,我使用Fisher-Yates Shuffle来做到这一点——但它不会洗牌 我做错了什么?费舍尔·耶茨的洗牌出现在问题之后 interface Question { questionText: string; answers: [string, string, string, string], correctAnswerIndex: number } const questions: Question[] = [
interface Question {
questionText: string;
answers: [string, string, string, string],
correctAnswerIndex: number
}
const questions: Question[] = [
{
questionText: 'Wie viele Lichtminuten ist die Sonne weg?',
answers: ['1', '3', '6', '8'],
correctAnswerIndex: 3
}
]
const question = (Question: any) => {
for (let i = Question.length -1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temp = Question[i];
Question[i] = Question[j];
Question[j] = temp;
}
return Question;
};
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("close", function () {
console.log("\nBYE BYE !!!");
process.exit(0);
});
const askQuestion = (question: string) => new Promise<string>(resolve => rl.question(question, resolve));
async function main() {
let correctAnswerCount=0;
for (const question of questions.slice(0, 5)) {
console.log(question.questionText);
let i = 0;
for (const answer of question.answers) {
console.log(String.fromCharCode(97 + i) + ') ' + answer);
i++;
}
const answer = await askQuestion("Richtige Antwort hier eingeben: ");
if (answer === String.fromCharCode(97 + question.correctAnswerIndex)) {
correctAnswerCount++;
console.log('Richtig You did define a function const question = (Question: any) => {
but you never called it!
Fix the variable names to not confuse everyone reading the code:
function shuffle<T>(arr: T[]): T[] {
for (let i = arr.length -1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
接口问题{
问题文本:字符串;
回答:[串,串,串,串],
更正答案索引:编号
}
常量问题:问题[]=[
{
问题文本:“你的生活是怎样的?”,
答案:['1','3','6','8'],
正确答案索引:3
}
]
常量问题=(问题:任何)=>{
for(设i=Question.length-1;i>0;i--){
常数j=数学楼层(数学随机()*(i+1));
const temp=问题[i];
问题[i]=问题[j];
问题[j]=临时工;
}
返回问题;
};
const rl=readline.createInterface({
输入:process.stdin,
输出:process.stdout
});
rl.on(“关闭”,功能(){
console.log(“\n再见!!!”);
进程退出(0);
});
const askQuestion=(问题:字符串)=>newpromise(解析=>rl.question(问题,解析));
异步函数main(){
让correctAnswerCount=0;
for(常量问题。切片(0,5)){
console.log(问题.问题文本);
设i=0;
for(问题的常量答案。答案){
console.log(String.fromCharCode(97+i)+')+answer);
i++;
}
const answer=等待提问(“Richtige Antwort hier eingeben:”;
if(答案===String.fromCharCode(97+问题.correctAnswerIndex)){
correctAnswerCount++;
log('Richtig您确实定义了一个函数constquestion=(问题:any)=>{
,但您从未调用过它
修正变量名,以免混淆所有阅读代码的人:
async function main() {
shuffle(questions);
// ^^^^^^^^^^^^^^^^^^^
let correctAnswerCount = 0;
for (const question of questions.slice(0, 5)) {
console.log(question.questionText);
…
你把洗牌称为哪里?不要把所有的东西都命名为question
你是对的,对不起,我对这个相当陌生。我试着把它命名。你把变量命名为const question=(question:any)=>{
像你的接口接口问题吗{
混淆他人或混淆自己?为什么此变量不是问题类型
?为什么问题不是问题?