2011-08-23 22 views
36

संभव डुप्लिकेट यादृच्छिक तत्वों प्राप्त करने के लिए:
JavaScript: Getting random value from an arrayकैसे एक सरणी से

var numbers = new Array('1','2','4','5','6','7','8','9','10'); 

मैं JavaScript व्यवस्था का है और अब बेतरतीब ढंग से चार अलग-अलग संख्या का चयन करना चाहते हैं और फिर इसे पृष्ठ पर व्यक्त करें (document.write के माध्यम से)। स्पष्ट रूप से प्रत्येक बार पृष्ठ को उपयोगकर्ता द्वारा पुनः लोड किया जाता है, यह चार अलग-अलग यादृच्छिक संख्या दिखाएगा।

+4

ओटी: सरणी अक्षरों का उपयोग करने के लिए यह बेहतर प्रथा है: 'var numbers = ['1', ...];'। –

+9

दरअसल यह वही प्रश्न नहीं है जैसा कि माना जाता है डुप्लिकेट: एक सरणी से एक से अधिक, अलग, सही ढंग से यादृच्छिक मान प्राप्त करना केवल एक यादृच्छिक मान प्राप्त करने से काफी जटिल है। –

+0

@ टिमडाउन: सहमत। यदि यह वही प्रश्न होगा जैसा कि माना जाता है कि उत्तर डुप्लिकेट समान होगा (समान प्रश्नों के समान उत्तर सही हैं?) जो स्पष्ट रूप से नहीं हैं। – Juan

उत्तर

49

आप सरणी को घुमा सकते हैं और पहले चार चुन सकते हैं।

numbers.sort(function() { return 0.5 - Math.random() }); 

अब numbers[0], numbers[1] ... और इतने पर यादृच्छिक और अद्वितीय तत्व है।

ध्यान दें कि यह विधि किसी सरणी को घुमाने के लिए एक इष्टतम तरीका नहीं हो सकती है: चर्चा के लिए Is it correct to use JavaScript Array.sort() method for shuffling? देखें।

+2

अच्छा है! अच्छा बिंदु अद्वितीय तत्वों को ध्यान में रखते हुए। – Jochem

+4

यह इस परिस्थिति में शायद ही महत्वपूर्ण है, लेकिन मुझे यह सब दिलचस्प लगता है; यह विधि सभी के बाद यादृच्छिक नहीं है: http : //www.sitepoint.com/microsoft-fix-their-non-random-browser-choice-screen/ – Matt

+0

@ मैट अच्छा बिंदु, मैं उत्तर संपादित करूंगा। – JJJ

3
//return a random integer between 0 and 10 

document.write(Math.floor(Math.random()*11)); 
+1

मुझे लगता है कि "चार अलग-अलग संख्या" का अर्थ है कि संख्याएं अद्वितीय होनी चाहिए । – JJJ

+0

या 'document.write (संख्याएं [(Math.floor (Math.random() * 11)]]); 'जो संख्यात्मक सरणी में 1-10 के रूप में कुछ छोटा नहीं है, जो तेजी से महत्वपूर्ण हो जाता है। – Jochem

+0

मैंने नहीं किया जैसा कि यह कहता है कि हर बार पृष्ठ लोड होता है, यह यादृच्छिक होना चाहिए। – NimChimpsky

2
var numbers = new Array('1','2','4','5','6','7','8','9','10'); 
document.write(numbers[Math.floor(Math.random()*numbers.length)]); 
18

आप इस रूप में यादृच्छिक रूप में जावास्क्रिप्ट का Math.random() के देशी कार्यान्वयन की अनुमति देगा होना चाहते हैं, तो आप निम्नलिखित, भी मूल सरणी अछूते ही रहे और केवल के रूप में ज्यादा randomizing के फायदे जो की तरह कुछ इस्तेमाल कर सकते हैं आवश्यकतानुसार सरणी:

function getRandomArrayElements(arr, count) { 
    var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index; 
    while (i-- > min) { 
     index = Math.floor((i + 1) * Math.random()); 
     temp = shuffled[index]; 
     shuffled[index] = shuffled[i]; 
     shuffled[i] = temp; 
    } 
    return shuffled.slice(min); 
} 


var numbers = ['1','2','4','5','6','7','8','9','10']; 
alert(getRandomArrayElements(numbers, 4)); 
संबंधित मुद्दे