উত্তর:
এটি একটি সাধারণ এক-লাইনার
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
সিসি ০.০ লাইসেন্সের শর্তাবলীতে জনসাধারণের ডোমেনে কোড প্রকাশিত হয়েছে ।
.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এখনকার চেয়ে আরও বেশি ব্যবহার করব :)
বলুন যে আপনি একটি এলোমেলো আইটেম চয়ন করতে চান যা শেষ সময়ের চেয়ে আলাদা (সত্যই এলোমেলো নয়, তবে এখনও একটি সাধারণ প্রয়োজন) ...
@ মারকাসের উত্তরের ভিত্তিতে আমরা আরেকটি প্রোটোটাইপ ফাংশন যুক্ত করতে পারি:
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নিজেই একটি বিটওয়াস অপারেশন যা কিছুই করে না, তবে জাভাস্ক্রিপ্টে ফ্লোটগুলি কোনও বিটওয়াইজ অপারেশনের আগেই ints এ রূপান্তরিত হয় । সুতরাং এটি এমন কিছু যা আসলে কীভাবে + ''কিছু না করে তবে জিনিসগুলিকে স্ট্রিংয়ে রূপান্তর করতে ব্যবহার করা যেতে পারে।
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) )
এটি @ জ্যাকব রিলকিনের সমাধানের মতো তবে এর চেয়ে সাধারণ:
এটি 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পরিবর্তে এর মতো কিছু ব্যবহার করুন।
আমি উপরের উত্তরের জটিলতার চারপাশে একটি উপায় খুঁজে পেয়েছি, কেবল ভেরিয়েবলটিকে অন্য ভেরিয়েবলের সাথে একত্রিত করে যে নম্বরটি মাইআরাইয়ের কলিংয়ের ভিতরে প্রদর্শিত হতে পারে [];। তৈরি হওয়া নতুন অ্যারে মুছে ফেলা এবং এর জটিলতাগুলির সাথে মিল রেখে, আমি একটি কার্যকরী সমাধান নিয়ে এসেছি:
<!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>
concatrandom
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(...))কলটি নোট করুন , যা গোল হয়।