शीर्षक में "अभ्यास" प्रश्नों को संदर्भित करता है, लेकिन स्टैक ओवरफ्लो शीर्षक में "प्रश्न" शब्द की अनुमति नहीं देता है।

मैं यह कहकर शुरुआत करूंगा कि जब जावास्क्रिप्ट की बात आती है तो मैं बहुत नौसिखिया हूं। मैं जो करने का प्रयास कर रहा हूं वह इस तरह स्वरूपित JSON का उपयोग करके एक प्रश्न बैंक बनाना है:

 {"questionlist":[
  {
  "question":"Test question 1",
  "option1":"Answer1A",
  "option2":"Answer1B",
  "option3":"Answer1C"
  },
  {
  "question":"Test question 2",
  "option1":"Answer2A",
  "option2":"Answer2B",
  "option3":"Answer2C"
  },
  {
  "question":"Test question 3",
  "option1":"Answer3A",
  "option2":"Answer3B",
  "option3":"Answer3C"
  }
]
}

और इसी तरह। फिर मैं एक पेज बनाना चाहता हूं, जो जावास्क्रिप्ट का उपयोग करते हुए, बेतरतीब ढंग से पहले बताए गए प्रश्न बैंक से १० प्रश्नों का चयन करता है (मान लें कि प्रश्न बैंक में कुल १०० प्रश्न होंगे) और इन १० प्रश्नों को उसी तरह प्रदर्शित करता है एक वास्तविक जीवन प्रश्नोत्तरी (अर्थात एक समय में एक नहीं, बल्कि उन सभी को) करेगी। फिर सही उत्तर चुनने के लिए बस रेडियो बटन रखें और अंत में एक "सबमिट" बटन रखें जो उत्तरों की जांच करता है।

यह Google के लिए हास्यास्पद रूप से कठिन है - मैं ज्यादातर जावास्क्रिप्ट और जेएसओएन या डिज़ाइन के बारे में प्रश्नोत्तरी में आया हूं जहां उत्तरों का क्रम यादृच्छिक है (प्रश्न स्वयं नहीं)। फिर से, यहाँ मेरी शब्दावली के साथ अत्यधिक तकनीकी नहीं होने के लिए खेद है। मुझे आशा है कि कोई प्राथमिक डिजाइन के साथ भी मदद कर सकता है - यह लगभग 3 लोगों के व्यक्तिगत उपयोग के लिए होगा, इसलिए इसे पूरी तरह से अनुकूलित करने की आवश्यकता नहीं है।

-2
JSJS 1 अप्रैल 2018, 15:01

4 जवाब

सबसे बढ़िया उत्तर

तो चलिए आपके लक्ष्य का TLDR लेते हैं।

आपके पास 100 प्रश्नों की एक सरणी है। आप पहली सरणी से चुने गए 10 प्रश्नों की एक अन्य सरणी चाहते हैं ताकि परिणामी सरणी में कोई दोहराए जाने वाले प्रश्न न हों।

हम इसे कैसे करेंगे?

आपको 10 बार सरणी सीमा के भीतर एक यादृच्छिक अनुक्रमणिका चुननी चाहिए, और हर बार जांच लें कि क्या आपने पहले से ही उस अनुक्रमणिका को नहीं चुना है (दूसरे शब्दों में डुप्लिकेट से बचें)।

अहसास।

मुझे लगता है कि आपके पास यह ऑब्जेक्ट कुछ चर में संग्रहीत है। यदि आपको स्ट्रिंग के रूप में इनपुट मिला है जो एक वैध JSON है, तो आप JSON.parse().

var obj = {"questionlist":[..., ..., ...]}

सबसे पहले, हमें questionList कुंजी द्वारा सभी प्रश्नों की सरणी मिलती है।

var list = obj.questionlist;

अब परिणामी 10 प्रश्नों को समाहित करने के लिए सरणी बनाते हैं।

var resultList;

हम एक यादृच्छिक अनुक्रमणिका का 10 गुना धक्का देकर इसे पॉप्युलेट करने जा रहे हैं जो >=0 और <list.length होगा, और यह सुनिश्चित करना न भूलें कि हर बार जब हम धक्का देते हैं तो यह एक अद्वितीय अनुक्रमणिका है।

पहले यह तय करते हैं कि हम एक यादृच्छिक सूचकांक कैसे चुनते हैं।

[0,1] के भीतर यादृच्छिक फ्लोट Math.random() निष्पादित करके प्राप्त किया जा सकता है। अब 0 ... list.length के भीतर संख्या प्राप्त करने के लिए हम इसे list.length से गुणा करते हैं। यह न भूलें कि यह एक फ्लोट हो सकता है, इसलिए फ़्लोटिंग पॉइंट के बाद वाले हिस्से को फेंक कर इसे एक पूर्णांक बना दें (यानी, संख्या को तलें)।
परिणामी सूत्र ~~(Math.random()*list.length) है,

आइए अब सभी कोड लिखें।

for( var k = 0; k < 10; k++ ) {
    var randIndex = ~~(Math.random()*list.length);
    //check if the index is not duplicate
    if( resultList.indexOf(randIndex) < 0)
        resultList.push(randIndex);
    else
        // else the index is duplicate so we don't need it and should move one step back in the loop
        k--;
}

अब resultList में १० यादृच्छिक गैर-दोहराव वाले प्रश्न अनुक्रमणिकाएं हैं। अब आप resultList सरणी को लूप करके १० यादृच्छिक प्रश्नों की परिणामी सूची को आउटपुट कर सकते हैं।

for( var k = 0; k < resultList.length; k++ )
    console.log(list[resultList[k]]);
0
Community 20 जून 2020, 09:12

सरणी को बेतरतीब ढंग से क्रमबद्ध करें और उसमें से n आइटम का एक टुकड़ा लें, यह भी चाल चलेगा:

yourArrayOfItems.sort(() => Math.random() - 0.5).slice(0, 10);
//                    ^ random sort method       ^ take 10 items
1
KooiInc 1 अप्रैल 2018, 12:37

यह फ़ंक्शन यादृच्छिक रूप से एक सरणी से N प्रश्नों का चयन करता है:

var bank = {
  "questionlist": [{
      "question": "Test question 1",
      "option1": "Answer1A",
      "option2": "Answer1B",
      "option3": "Answer1C"
    },
    {
      "question": "Test question 2",
      "option1": "Answer2A",
      "option2": "Answer2B",
      "option3": "Answer2C"
    },
    {
      "question": "Test question 3",
      "option1": "Answer3A",
      "option2": "Answer3B",
      "option3": "Answer3C"
    }
  ]
}

function selectN(bank, n) {
  var list = bank.questionlist;
  if (list.length < n) n = list.length; //to prevent endless loop
  var set = new Set(); //using a set to prevent duplication
  while (set.size < n) set.add(list[Math.floor(Math.random() * list.length)]);
  return Array.from(set)
}

console.log(selectN(bank, 2));
0
Sebastian Speitel 1 अप्रैल 2018, 12:24

कृपया इसे आजमाएं, जहां 'एन' आपके इच्छित यादृच्छिक तत्वों की संख्या है,

const items = {
    "questionlist": [{
            "question": "Test question 1",
            "option1": "Answer1A",
            "option2": "Answer1B",
            "option3": "Answer1C"
        },
        {
            "question": "Test question 2",
            "option1": "Answer2A",
            "option2": "Answer2B",
            "option3": "Answer2C"
        },
        {
            "question": "Test question 3",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        },
        {
            "question": "Test question 4",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        },
        {
            "question": "Test question 5",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        },
        {
            "question": "Test question 6",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        },
        {
            "question": "Test question 7",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        },
        {
            "question": "Test question 8",
            "option1": "Answer3A",
            "option2": "Answer3B",
            "option3": "Answer3C"
        }
    ]
}

function random_item(questions, n) {
    var arr = [];
    for (let i = 0; i < n; i++) {
        arr.push(questions[Math.floor(Math.random() * questions.length)])
    }
    return arr

}

console.log(random_item(items.questionlist, 2))
0
Vijayanath Viswanathan 1 अप्रैल 2018, 12:19