Je fais une application de quiz dans React Native, il dispose de cet ensemble d'objets dans lesquels chaque objet contient une déclaration de question, des choix et le bon choix. Dans ce cas, il y aura un total de 15 objets, mais j'ai besoin d'un nouveau tableau contenant seulement 5 des objets de ce tableau. Ils doivent être sélectionnés au hasard à chaque fois que je démarre le quiz. Comment obtenir ce tableau, aidez
const questions = [
new quizQuestions(
'What is capital of Pakistan?',
['Karachi', 'Islamabad', 'Lahore', 'Peshawar'],
'Islamabad',
),
new quizQuestions(
'What is capital of India?',
['delhi', 'Islamabad', 'zcjzj', 'Peshawar'],
'delhi',
),
new quizQuestions(
'What is capital of Pakistan?',
['Karachi', 'Islamabad', 'Lahore', 'Peshawar'],
'Islamabad',
),
]
4 Réponses :
Utilisez JS Random Méthode pour générer des nombres aléatoires de 0 à 15 // Random 5 TRAYAY P> const selectedQuestionArr = [];
let addedIndex = [];
for (var i = 0; i < 5; i++) {
let randomIdx;
do {
randomIdx = Math.floor(Math.random() * 15);
}
while(addedIndex.indexOf(randomIdx) > -1);
//record added index to not include it in the next cycle
addedIndex.push(randomIdx);
//push the randomly selected question
selectedQuestionArr.push(questions[randomIdx]);
}
console.log(selectedQuestionArr);
Cela pourrait répéter une question si Math.Random retourne la vieille valeur index. Ne va pas?
@Moezatlas j'ai modifié la réponse
Ouais je pense que cela fonctionne. J'ai changé RandomIDX.Push (RandomIDX) sur AdiTIndex.Push (RandomIDX) Comme précédemment a eu une erreur
@Moezatlas n'est pas cette solution vous a aidé?
aucun moyen d'accepter 2 réponses, vous devez décider quelle réponse vous donnerait la solution la meilleure et fiable pour votre problème actuel.
Très bien au hasard ce dont vous avez besoin.
Utilisation de p> fonction génératrice code>: p> const questions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
const randomise = (arr, numOfElem) => {
let copyArray = [...arr];
const getRandom = () => Math.floor(Math.random() * copyArray.length);
return () => {
// If numOfElem is greater, then clone again
// suppose you have 15 question but you take 6. SO after 2 iteration, copyArray will have only 3 element so clone again
if (numOfElem > copyArray.length) {
// Clone again
copyArray = [...arr];
}
// pick 5 random data.
let result = [];
for (let i = 0; i < numOfElem; i++) {
result.push(copyArray.splice(getRandom(), 1)[0]);
}
return result;
};
};
const questionGenerator = randomise(questions, 5);
console.log(questionGenerator()); // random [ 11, 3, 7, 2, 8 ]
console.log(questionGenerator()); // random [ 12, 13, 14, 9, 5 ]
console.log(questionGenerator()); // random [ 6, 1, 4, 15, 10 ]
console.log(questionGenerator()); // random [ 14, 12, 8, 2, 13 ]
console.log(questionGenerator()); // random [ 9, 3, 10, 6, 11 ]
MDR! :-D laissez-moi savoir si vous avez besoin d'aide pour comprendre! Veuillez accepter comme réponse :-) Si fonctionne pour vous
Ouais je voulais juste vérifier dans mon code ça marche.
J'ai ajouté un exemple de fonction de générateur réel. Vous pouvez vérifier cela aussi. Je ajoute des détails plus tard! comme commentaire. Vous pouvez vérifier plus tard.
S'il vous plaît vérifier que j'ai ajouté quelques commentaires. pour vous aider.! à votre santé! Continuez à coder!
Merci Bro Comments Aide beaucoup :)
Hey xdepakv pouvez-vous m'aider un peu plus si tu es libre maintenant?
Pour votre cas particulier, je n'ai pas trouvé de fonction Lodash pour cela que j'ai implémenté ma propre logique JavaScript pour cela, vous pouvez avoir un look. P>
Presque une répétition de la réponse d'Azad: D Mais j'ai trouvé notre méthode très simple et simple. Passez-la dans la sélection desquêtes comme une matrice vide
p> function randomizeQuestions(allQuestions,selectedQuestions,numberToSelect)
{
selectedIndex = [];
var randIndex;
for(var i = 0; i < numberToSelect; i++)
{
do{
randIndex = Math.floor(Math.random() * allQuestions.length);
}while(selectedIndex.includes(randIndex));
selectedIndex.push(randIndex);
selectedQuestions.push(allQuestions[randIndex]);
}
}