Javascript 如何使用Fisher-Yates shuffle在TypeScript中洗牌数组?

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[] = [

我想用打字脚本编写一个测验。提出的问题应该是随机选择的,我使用Fisher-Yates Shuffle来做到这一点——但它不会洗牌

我做错了什么?费舍尔·耶茨的洗牌出现在问题之后

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)=>{
像你的接口
接口问题吗{
混淆他人或混淆自己?为什么此变量不是
问题类型
?为什么问题不是问题?