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

Yağız.

Hectopat
Katılım
29 Ocak 2020
Mesajlar
86
Çö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.
 
Gelen soruları bir veri yapısına (mesela dizi olsun) depolayıp ardından her gelen soru için bu soru bu dizinin içinde var mı diye kontrol edebilirsin. Yeni soru dizide yoksa devam edebilirsin. Dizide varsa tekrar soru çekersin.
 
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'ı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.
Gelen soruları bir veri yapısına (mesela dizi olsun) depolayıp ardından her gelen soru için bu soru bu dizinin içinde var mı diye kontrol edebilirsin. Yeni soru dizide yoksa devam edebilirsin. Dizide varsa tekrar soru çekersin.
Gelen soruları bir veri yapısına (mesela dizi olsun) depolayıp ardından her gelen soru için bu soru bu dizinin içinde var mı diye kontrol edebilirsin. Yeni soru dizide yoksa devam edebilirsin. Dizide varsa tekrar soru çekersin.

Ç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ı.
 

Yeni konular

Geri
Yukarı