前提・実現したいこと
ここに質問の内容を詳しく書いてください。
React native で 4択クイズのアプリを作っています。
クイズをランダムかつ重複しないように表示させたいです。
ランダム表示は成功しましたが、どうしても同じクイズが表示され重複してしまいます。
以下のソースコードからどのように重複せずにクイズを表示させることが出来るのかわかりません。
React Native や Type Scriptについて全くの初心者であるため、迷走中です。
どなたかご教授宜しくお願いいたします。
発生している問題・エラーメッセージ
エラーは出ていません。
該当のソースコード
export function App() {
const questions = [
{
questionText: "mouth",
answerOptions: [
{ answerText: "目", isCorrect: false },
{ answerText: "顔", isCorrect: false },
{ answerText: "口", isCorrect: true },
{ answerText: "耳", isCorrect: false },
],
},
{
questionText: "eyebrow",
answerOptions: [
{ answerText: "胸", isCorrect: false },
{ answerText: "お腹", isCorrect: false },
{ answerText: "眉毛", isCorrect: true },
{ answerText: "耳", isCorrect: false },
],
},
{
questionText: "knee",
answerOptions: [
{ answerText: "腕", isCorrect: false },
{ answerText: "肩", isCorrect: false },
{ answerText: "膝", isCorrect: true },
{ answerText: "肘", isCorrect: false },
],
},
{
questionText: "elbow",
answerOptions: [
{ answerText: "背中", isCorrect: false },
{ answerText: "手", isCorrect: false },
{ answerText: "肘", isCorrect: true },
{ answerText: "首", isCorrect: false },
],
},
];
const randomQuestions =
questions[Math.floor(Math.random() * questions.length)];
return (
<View style={styles.container}>
};
react native``` ### 試したこと クイズを重複しないように試したことが、 「空の配列を作り、配列の中に同じ数字がなければ配列にpushし、その後spliceで削除する」といったことも試しました。 pushした際、(例えばランダムの数字が1なら)空の配列に[1]と入るのですが、次の問題にいったとき、「配列がまた空に戻りそこからランダムの数字が入れられる」ということが起こるため、再度ランダムの数字に1が選ばれることがあります。(よってクイズが重複します) 以下が試したコードです。 const randomQuiz: number[] = []; const min = 0; const max = questions.length; function intRandom(min: number, max: number) { return Math.floor(Math.random() * (max - min)) + min; } for (let i = min; i < max; i++) { while (true) { let tmp = intRandom(min, max); if (!randomQuestions.includes(tmp)) { randomQuestions.push(tmp); randomQuestions.splice(tmp); break; } } } ### 補足情報(FW/ツールのバージョンなど) 使っているツールは、macで、ソフトは Visual Studio Code です。
あなたの回答
tips
プレビュー