JavaScript JSON dosyasından rastgele alınan verinin tekrarlanmaması nasıl çözülür?

Yağız.

Hectopat
Katılım
29 Ocak 2020
Mesajlar
94
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Merhaba iyi sosyaller. Yazdığım kod JSON dosyasından rastgele bir soru seçmeyi sağlıyor fakat, seçilen soruyu tekrardan seçince program amacından çıkıyor ve çok büyük bir karışıklık oluyor. Bu sorunu çözmek için (daha öncesinden seçilmiş olan bir soruyu tekrardan seçmemek) kodu nasıl düzenlemeliyim?

JavaScript:
 _this.insertQuestion = function (data) {
 var questionIndex = Math.floor(Math.random() * data.results.length); // Rastgele bir soru
 var question = data.results[questionIndex];

 var incorrectAnswers = question.incorrect_answers;
 var correctAnswer = _this.htmlDecode(question.correct_answer);
 var allAnswers = _this.shuffle(
 incorrectAnswers.concat(correctAnswer)
 );
 var idxCorrAns = allAnswers.indexOf(correctAnswer);
 _this.setState({
 question: question.question,
 correctAnswer: correctAnswer,
 idxCorrAns: idxCorrAns,
 canAnswer: [true, true, true, true],
 allAnswers: allAnswers,
 loading: false,
 });
 };

 _this.getQuestion = function () {
 if (_this.state.name === "1")
 fetch("./deneme1.json")
 .then(function (data) {
 if (data.ok) {
 return data.json();
 } else {
 throw new Error("Veriyi alırken sorun yaşandı.");
 }
 })
 .then(function (data) {
 _this.insertQuestion(data);
 })
 .catch(function (error) {
 console.log(error);
 });
 };
 
Son düzenleyen: Moderatör:
JavaScript hakkında bilgi sahibi değilim fakat kodun çalışma esnasında, listeden seçilen soruyu çıkarıp soruların tekrarlanmamasını sağlayabilirsiniz.
 
JSON'ın şu şekilde olduğunu düşünürsek:
JSON:
{
    "1": {
        q: "Soru 1",
        a: "Cevap 1"
    },
    "2": {
        q: "Soru 2",
        a: "Cevap 2"
    },
    "3": {
        q: "Soru 3",
        a: "Cevap 3"
    },
}

ID'lerden rastgele seçip, o ID'yi bir dizide tutun. Rastgele seçilecek ID'nin dizi içerisinde olup olmadığını kontrol edin. ID ile tutmamızın sebebi de boşu boşuna soruları dizide tutup çok yer kaplamamasını sağlamak.
 

JSON:
{
    "response_code": 0,
    "results": [
        {
            "question": "a",
            "correct_answer": "b",
            "incorrect_answers": [
                "c",
                "d",
                "e"
            ]
        },
        {
            "question": "a",
            "correct_answer": "b",
            "incorrect_answers": [
                "c",
                "d",
                "e"
            ]
        },
        {
        {
            "question": "a",
            "correct_answer": "b",
            "incorrect_answers": [
                "c",
                "d",
                "e"
            ]
        }
    ]
}
Json dosyası bu şekilde.

Çok teşekkürler cevaplar için. Bu dediklerinizi nasıl koda dökeceğim ? Javascript hakkında çok bir bilgim yok. Yardım edebilirseniz çok sevinirim.
 
Çok teşekkürler cevaplar için. Bu dediklerinizi nasıl koda dökeceğim ? Javascript hakkında çok bir bilgim yok. Yardım edebilirseniz çok sevinirim.
Hocam Object.keys ile json içindeki soruların keylerini al bu sana ["1","2","3"] gibi bir liste döndürecektir. Daha sonra bu listeden seçilen sorunun keyini kaldırırsan sorunun çözülecektir.

let liste = Object.keys(json_objesi) şeklinde kullanımı.
 
Teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…