जवाबों:
यह एक साधारण लाइनर है
const randomElement = array[Math.floor(Math.random() * array.length)];
उदाहरण
const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
const randomMonth = months[Math.floor(Math.random() * months.length)];
console.log("random month =>", randomMonth);
var rand = myArray[Math.random() * myArray.length>>0]
कि थोड़ा तेज
var rand = myArray[Math.random() * myArray.length | 0]
यदि आप पहले से ही अंडरस्कोर या लॉश को अपने प्रोजेक्ट में शामिल कर चुके हैं, जिसका आप उपयोग कर सकते हैं _.sample
।
// will return one item randomly from the array
_.sample(['January', 'February', 'March']);
यदि आपको यादृच्छिक रूप से एक से अधिक आइटम प्राप्त करने की आवश्यकता है, तो आप इसे अंडरस्कोर में दूसरे तर्क के रूप में पास कर सकते हैं:
// will return two items randomly from the array using underscore
_.sample(['January', 'February', 'March'], 2);
या _.sampleSize
लॉश में विधि का उपयोग करें :
// will return two items randomly from the array using lodash
_.sampleSize(['January', 'February', 'March'], 2);
यदि आप एक यादृच्छिक मूल्य प्राप्त करने की योजना बना रहे हैं, तो आप इसके लिए एक फ़ंक्शन परिभाषित करना चाहते हैं।
पहले, इसे अपने कोड में कहीं रखें:
Array.prototype.sample = function(){
return this[Math.floor(Math.random()*this.length)];
}
अभी:
[1,2,3,4].sample() //=> a random element
CC0 1.0 लाइसेंस की शर्तों के तहत सार्वजनिक डोमेन में जारी कोड ।
.sample()
एक यादृच्छिक आइटम प्राप्त करने के लिए किसी भी सरणी पर कॉल करने की अनुमति देता है
~~
की तुलना में बहुत तेज है Math.Floor()
, इसलिए जब यूआई तत्वों का उपयोग करते हुए आउटपुट का प्रदर्शन करने की बात आती है, तो ~~
गेम जीतता है। और जानकारी
var rand = myArray[~~(Math.random() * myArray.length)];
लेकिन अगर आपको पता है कि सरणी में लाखों तत्व होने वाले हैं, तो आप बिटवाइन ऑपरेटर के बीच पुनर्विचार करना चाहते हैं और Math.Floor()
, जैसे कि बिटवाइज़ ऑपरेटर बड़ी संख्या के साथ अजीब व्यवहार करता है। आउटपुट के साथ समझाया गया उदाहरण नीचे देखें। और जानकारी
var number = Math.floor(14444323231.2); // => 14444323231
var number = 14444323231.2 | 0; // => 1559421343
Math.floor
अब और अधिक उपयोग करूंगा :)
कहो कि आप एक यादृच्छिक आइटम चुनना चाहते हैं जो पिछली बार से अलग है (वास्तव में यादृच्छिक नहीं है, लेकिन अभी भी एक सामान्य आवश्यकता है) ...
@Markus द्वारा उत्तर पर निर्माण, हम एक और प्रोटोटाइप फ़ंक्शन जोड़ सकते हैं:
Array.prototype.randomDiffElement = function(last) {
if (this.length == 0) {
return;
} else if (this.length == 1) {
return this[0];
} else {
var num = 0;
do {
num = Math.floor(Math.random() * this.length);
} while (this[num] == last);
return this[num];
}
}
और इस तरह लागू करें:
var myRandomDiffElement = myArray.randomDiffElement(lastRandomElement)
यदि आपके पास निश्चित मान हैं (जैसे एक महीने का नाम सूची) और एक-पंक्ति समाधान चाहते हैं
var result = ['January', 'February', 'March'][Math.floor(Math.random() * 3)]
सरणी का दूसरा भाग एक एक्सेस ऑपरेशन है, जिसका वर्णन जावास्क्रिप्ट में [5,6,8,7] [1,2] = 8 क्यों किया जाता है?
सबसे छोटा संस्करण:
var myArray = ['January', 'February', 'March'];
var rand = myArray[(Math.random() * myArray.length) | 0]
| 0
है?
| 0
अपने आप में एक बिटवाइज़ ऑपरेशन है जो कुछ भी नहीं करता है, लेकिन किसी भी बिटवाइज़ ऑपरेशन से पहले जावास्क्रिप्ट फ़्लोट्स को किलों में बदल दिया जाता है । तो यह कुछ ऐसा है कि + ''
वास्तव में कुछ भी कैसे नहीं किया जाता है लेकिन चीजों को तार में बदलने के लिए उपयोग किया जा सकता है।
Math.floor
बल्कि यहां करना सही है। यह एक ऑपरेटर है इसलिए यह Math.floor
केवल तभी से तेज है जब किसी भी समय कुछ कोड चला सकते हैं Math.floor = someOtherFunction
और वे '' के लिए भी ऐसा नहीं कर सकते। दूसरी ओर के रूप में के लिए Math.floor
और |
अलग कोशिश Math.floor(-1.5)
बनाम जा रहा है -1.5 | 0
। वैसे आपको कोष्ठक की आवश्यकता नहीं है। |
बहुत ही कम मिसाल है।
यदि आप इसे एक पंक्ति पर लिखना चाहते हैं, तो पास्कल के समाधान की तरह, एक और समाधान यह होगा कि आप ES6 के फंक्शन फ़ंक्शन का उपयोग करके इसे लिखें (इस तथ्य के आधार पर, कि किसी एक n
आइटम को बेतरतीब ढंग से चुनने की संभावना है 1/n
):
var item = ['A', 'B', 'C', 'D'].find((_, i, ar) => Math.random() < 1 / (ar.length - i));
console.log(item);
परीक्षण के उद्देश्यों के लिए उस दृष्टिकोण का उपयोग करें और यदि केवल अलग-अलग चर में सरणी को नहीं बचाने का एक अच्छा कारण है। अन्यथा अन्य उत्तर ( floor(random()*length
और एक अलग कार्य का उपयोग करके) आपके जाने का रास्ता है।
Faker.js यादृच्छिक परीक्षण डेटा उत्पन्न करने के लिए कई उपयोगिता कार्य करता है। परीक्षण सूट के संदर्भ में यह एक अच्छा विकल्प है:
const Faker = require('faker');
Faker.random.arrayElement(['January', 'February', 'March']);
जैसा कि टिप्पणीकारों ने उल्लेख किया है, आपको आमतौर पर इस लाइब्रेरी का उपयोग उत्पादन कोड में नहीं करना चाहिए।
Faker
जिसमें से एक यादृच्छिक सरणी तत्व का चयन किया जाता है।
ऐरे प्रोटोटाइप का संपादन हानिकारक हो सकता है। यहाँ यह काम करने के लिए एक सरल कार्य है।
function getArrayRandomElement (arr) {
if (arr && arr.length) {
return arr[Math.floor(Math.random() * arr.length)];
}
// The undefined will be returned if the empty array was passed
}
उपयोग:
// Example 1
var item = getArrayRandomElement(['January', 'February', 'March']);
// Example 2
var myArray = ['January', 'February', 'March'];
var item = getArrayRandomElement(myArray);
पुनरावर्ती, स्टैंडअलोन फ़ंक्शन जो किसी भी संख्या में आइटम वापस कर सकता है ( लॉज के समान )।
function getRandomElementsFromArray(array, numberOfRandomElementsToExtract = 1) {
const elements = [];
function getRandomElement(arr) {
if (elements.length < numberOfRandomElementsToExtract) {
const index = Math.floor(Math.random() * arr.length)
const element = arr.splice(index, 1)[0];
elements.push(element)
return getRandomElement(arr)
} else {
return elements
}
}
return getRandomElement([...array])
}
क्रिप्टो-मजबूत यादृच्छिक आइटम फॉर्म सरणी उपयोग प्राप्त करने के लिए
let rndItem = a=> a[rnd()*a.length|0];
let rnd = ()=> crypto.getRandomValues(new Uint32Array(1))[0]/2**32;
var myArray = ['January', 'February', 'March'];
console.log( rndItem(myArray) )
यह @Jacob Relkin के समाधान के समान, लेकिन सामान्य से अधिक है:
यह ES2015 है:
const randomChoice = arr => {
const randIndex = Math.floor(Math.random() * arr.length);
return arr[randIndex];
};
कोड 0 और सरणी की लंबाई के बीच एक यादृच्छिक संख्या का चयन करके काम करता है, फिर उस इंडेक्स पर आइटम वापस करता है।
var item = myArray[Math.floor(Math.random()*myArray.length)];
या समकक्ष छोटा संस्करण:
var item = myArray[(Math.random()*myArray.length)|0];
नमूना कोड:
var myArray = ['January', 'February', 'March'];
var item = myArray[(Math.random()*myArray.length)|0];
console.log('item:', item);
सरल कार्य:
var myArray = ['January', 'February', 'March'];
function random(array) {
return array[Math.floor(Math.random() * array.length)]
}
random(myArray);
या
var myArray = ['January', 'February', 'March'];
function random() {
return myArray[Math.floor(Math.random() * myArray.length)]
}
random();
या
var myArray = ['January', 'February', 'March'];
function random() {
return myArray[Math.floor(Math.random() * myArray.length)]
}
random();
मेरी राय में, प्रोटोटाइप के साथ खिलवाड़ करने से बेहतर है, या इसे केवल समय में घोषित करना, मैं इसे खिड़की पर उजागर करना पसंद करता हूं:
window.choice = function() {
if (!this.length || this.length == 0) return;
if (this.length == 1) return this[0];
return this[Math.floor(Math.random()*this.length)];
}
अब आपके ऐप पर कहीं भी आप इसे कॉल करते हैं जैसे:
var rand = window.choice.call(array)
इस तरह आप अभी भी for(x in array)
लूप का उपयोग ठीक से कर सकते हैं
for...in
भी सरणियों पर या सामान्य रूप से भी उपयोग नहीं करना चाहिए । आप प्रोटोटाइप श्रृंखला चलने का जोखिम उठाते हैं। यह किसी वस्तु के सभी गुणों के लिए भी है, सभी सूचकांकों में नहीं। यदि आप किसी सरणी पर एक पुनरावृत्त का उपयोग करना चाहते हैं, तो उपयोग करें for (var i = 0; i < foo.length; i++){}
। और भी बेहतर, Array.prototype.forEach
इसके बजाय कुछ का उपयोग करें ।
मुझे शीर्ष उत्तर की जटिलताओं के चारों ओर एक रास्ता मिल गया है, बस चर रैंड को दूसरे चर में समेट कर, जो उस संख्या को myArray के कॉलिंग के अंदर प्रदर्शित करने की अनुमति देता है []; बनाई गई नई सरणी को हटाकर और इसके साथ जटिलताएं होने के कारण, मैं एक समाधान के साथ आया हूं:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var myArray = ['January', 'February', 'March', 'April', 'May'];
var rand = Math.floor(Math.random() * myArray.length);
var concat = myArray[rand];
function random() {
document.getElementById("demo").innerHTML = (concat);
}
</script>
<button onClick="random();">
Working Random Array generator
</button>
</body>
</html>
concat
यहाँ क्यों बदल रहा है ... random
खुद इसे नहीं बदल रहा है, और कुछ नहीं एक बार से अधिक कॉल किया जा रहा है ....
static generateMonth() {
const theDate = ['January', 'February', 'March'];
const randomNumber = Math.floor(Math.random()*3);
return theDate[randomNumber];
};
आप सरणी के लिए एक निरंतर चर सेट करते हैं, आपके पास फिर एक और स्थिरांक होता है जो सरणी में तीन वस्तुओं के बीच यादृच्छिक रूप से चुनता है और फिर फ़ंक्शन केवल परिणाम लौटाता है।
यादृच्छिक तत्व प्राप्त करने का एक सामान्य तरीका:
let some_array = ['Jan', 'Feb', 'Mar', 'Apr', 'May'];
let months = random_elems(some_array, 3);
console.log(months);
function random_elems(arr, count) {
let len = arr.length;
let lookup = {};
let tmp = [];
if (count > len)
count = len;
for (let i = 0; i < count; i++) {
let index;
do {
index = ~~(Math.random() * len);
} while (index in lookup);
lookup[index] = null;
tmp.push(arr[index]);
}
return tmp;
}
रैंडोज इसे और अधिक सरल और पठनीय बनाते हैं:
console.log( rando(['January', 'February', 'March']).value );
<script src="https://randojs.com/1.0.0.js"></script>
यह कैसे करना है इसका एक उदाहरण है:
$scope.ctx.skills = data.result.skills;
$scope.praiseTextArray = [
"Hooray",
"You\'re ready to move to a new skill",
"Yahoo! You completed a problem",
"You\'re doing great",
"You succeeded",
"That was a brave effort trying new problems",
"Your brain was working hard",
"All your hard work is paying off",
"Very nice job!, Let\'s see what you can do next",
"Well done",
"That was excellent work",
"Awesome job",
"You must feel good about doing such a great job",
"Right on",
"Great thinking",
"Wonderful work",
"You were right on top of that one",
"Beautiful job",
"Way to go",
"Sensational effort"
];
$scope.praiseTextWord = $scope.praiseTextArray[Math.floor(Math.random()*$scope.praiseTextArray.length)];
एक और आसान तरीका:
var myArray = ['keke','keko','cano','halo','zirto'];
var randomValue = myArray[Math.round((Math.random()*1000))%myArray.length];
एक यादृच्छिक मान बनाएं और सरणी में पास करें
कृपया निम्नलिखित कोड का प्रयास करें ..
//For Search textbox random value
var myPlaceHolderArray = ['Hotels in New York...', 'Hotels in San Francisco...', 'Hotels Near Disney World...', 'Hotels in Atlanta...'];
var rand = Math.floor(Math.random() * myPlaceHolderArray.length);
var Placeholdervalue = myPlaceHolderArray[rand];
alert(Placeholdervalue);
Math.floor(Math.random(...))
कॉल को नोट करें, जो नीचे राउंड हो।