Math.random()
روش به تنهایی، با محدودیت های خود، آن را برای تولید اعداد تصادفی منحصر به فرد کاهش نمی دهد. Amejimaobari Ollornwi نحوه تولید یک سری اعداد تصادفی منحصر به فرد را با استفاده از Set
شیء، نحوه استفاده از این اعداد تصادفی به عنوان شاخص برای آرایه ها، و برخی از کاربردهای عملی تصادفی سازی را بررسی می کند.
جاوا اسکریپت دارای بسیاری از توابع داخلی است که به شما امکان می دهد عملیات های مختلفی را انجام دهید. یکی از این توابع داخلی است Math.random()
روش، که یک عدد ممیز شناور تصادفی تولید می کند که می تواند به اعداد صحیح دستکاری شود.
با این حال، اگر می خواهید یک سری از اعداد تصادفی منحصر به فرد ایجاد کنید و جلوه های تصادفی بیشتری را در کد خود ایجاد کنید، باید یک راه حل سفارشی برای خود ایجاد کنید زیرا Math.random()
روش به تنهایی نمی تواند این کار را برای شما انجام دهد.
در این مقاله، ما می خواهیم یاد بگیریم که چگونه این مشکل را دور بزنیم و یک سری اعداد تصادفی منحصر به فرد را با استفاده از Set
شی در جاوا اسکریپت، که می توانیم از آن برای ایجاد افکت های تصادفی تر در کد خود استفاده کنیم.
توجه داشته باشید: این مقاله فرض میکند که شما میدانید چگونه اعداد تصادفی در جاوا اسکریپت تولید کنید و همچنین چگونه با مجموعهها و آرایهها کار کنید.
ایجاد یک سری منحصر به فرد از اعداد تصادفی
یکی از راههای تولید یک سری اعداد تصادفی منحصر به فرد در جاوا اسکریپت استفاده از آن است Set
اشیاء دلیل اینکه ما از مجموعه ها استفاده می کنیم این است که عناصر یک مجموعه منحصر به فرد هستند. میتوانیم بهطور مکرر اعداد صحیح تصادفی را تولید کرده و در مجموعهها وارد کنیم تا زمانی که تعداد اعداد صحیح مورد نظرمان را بدست آوریم.
و از آنجایی که مجموعهها اجازه عناصر تکراری را نمیدهند، به عنوان فیلتری عمل میکنند تا تمام اعداد تکراری تولید شده و درج شده در آنها را حذف کند تا مجموعهای از اعداد صحیح منحصربهفرد به دست آوریم.
در اینجا نحوه برخورد ما با کار آمده است:
- ایجاد یک
Set
شی - تعریف کنید که چه تعداد اعداد تصادفی تولید شود و از چه طیفی از اعداد استفاده شود.
- هر عدد تصادفی را تولید کنید و بلافاصله اعداد را در آن وارد کنید
Set
تا اینکهSet
با تعداد معینی از آنها پر شده است.
در زیر یک مثال سریع از نحوه ترکیب کدها آورده شده است:
function generateRandomNumbers(count, min, max) {
// 1: Create a `Set` object
let uniqueNumbers = new Set();
while (uniqueNumbers.size < count) {
// 2: Generate each random number
uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
// 3: Immediately insert them numbers into the Set...
return Array.from(uniqueNumbers);
}
// ...set how many numbers to generate from a given range
console.log(generateRandomNumbers(5, 5, 10));
کاری که کد انجام می دهد ایجاد یک کد جدید است Set
شی و سپس تولید و اعداد تصادفی را به مجموعه اضافه می کنیم تا تعداد اعداد صحیح مورد نظر ما در مجموعه گنجانده شود. دلیل اینکه ما یک آرایه را برمی گردانیم این است که کار با آنها آسان تر است.
با این حال، یک نکته قابل توجه این است که تعداد اعداد صحیحی که می خواهید تولید کنید (نمایش داده شده توسط count
در کد) باید کمتر از حد بالای محدوده شما به اضافه یک باشد (نمایش داده شده توسط max + 1
در کد). در غیر این صورت، کد برای همیشه اجرا خواهد شد. شما می توانید اضافه کنید if statement
به کد برای اطمینان از اینکه همیشه اینطور است:
function generateRandomNumbers(count, min, max) {
// if statement checks that `count` is less than `max + 1`
if (count > max + 1) {
return "count cannot be greater than the upper limit of range";
} else {
let uniqueNumbers = new Set();
while (uniqueNumbers.size < count) {
uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
return Array.from(uniqueNumbers);
}
}
console.log(generateRandomNumbers(5, 5, 10));
استفاده از سری اعداد تصادفی منحصر به فرد به عنوان شاخص آرایه
تولید یک سری اعداد تصادفی یک چیز است. استفاده از آنها چیز دیگری است.
توانایی استفاده از یک سری اعداد تصادفی با آرایهها، احتمالات زیادی را باز میکند: میتوانید از آنها در به هم ریختن فهرستهای پخش در یک برنامه موسیقی، نمونهبرداری تصادفی دادهها برای تجزیه و تحلیل، یا، همانطور که من انجام دادم، به هم ریختن کاشیها در یک بازی حافظه استفاده کنید.
بیایید کد را از آخرین مثال برداریم و از آن استفاده کنیم تا حروف تصادفی الفبا را برگردانیم. ابتدا آرایه ای از حروف را می سازیم:
const englishAlphabets = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);
// rest of code
سپس ما map
حروف در محدوده اعداد:
const englishAlphabets = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);
// generateRandomNumbers()
const randomAlphabets = randomIndexes.map((index) => englishAlphabets(index));
در کد اصلی، generateRandomNumbers()
تابع به کنسول وارد شده است. این بار، یک متغیر جدید می سازیم که تابع را فراخوانی می کند تا بتوان آن را مصرف کرد randomAlphabets
:
const englishAlphabets = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);
// generateRandomNumbers()
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets(index));
اکنون میتوانیم خروجی را مانند قبل وارد کنسول کنیم تا نتایج را ببینیم:
const englishAlphabets = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);
// generateRandomNumbers()
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets(index));
console.log(randomAlphabets);
و هنگامی که ما قرار می دهیم generateRandomNumbers
()
تعریف تابع به عقب، کد نهایی را دریافت می کنیم:
const englishAlphabets = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);
function generateRandomNumbers(count, min, max) {
if (count > max + 1) {
return "count cannot be greater than the upper limit of range";
} else {
let uniqueNumbers = new Set();
while (uniqueNumbers.size < count) {
uniqueNumbers.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
return Array.from(uniqueNumbers);
}
}
const randomIndexes = generateRandomNumbers(5, 0, 25);
const randomAlphabets = randomIndexes.map((index) => englishAlphabets(index));
console.log(randomAlphabets);
بنابراین، در این مثال، ما یک آرایه جدید از حروف الفبا را با انتخاب تصادفی برخی از حروف در خود ایجاد کردیم. englishAlphabets
آرایه
شما می توانید در یک آرگومان شمارش از englishAlphabets.length
به generateRandomNumbers
اگر میخواهید عناصر موجود در آن را به هم بزنید، عمل کنید englishAlphabets
آرایه به جای. منظورم اینه:
generateRandomNumbers(englishAlphabets.length, 0, 25);
بسته بندی
در این مقاله، نحوه ایجاد تصادفی سازی در جاوا اسکریپت با پوشش نحوه تولید یک سری اعداد تصادفی منحصر به فرد، نحوه استفاده از این اعداد تصادفی به عنوان شاخص برای آرایه ها، و همچنین برخی از کاربردهای عملی تصادفی سازی بحث کرده ایم.
بهترین راه برای یادگیری هر چیزی در توسعه نرم افزار، مصرف محتوا و تقویت دانشی است که از آن محتوا با تمرین به دست آورده اید. بنابراین، در اینجا متوقف نشوید. مثالهای این آموزش را اجرا کنید (اگر این کار را نکردهاید)، با آنها بازی کنید، راهحلهای منحصربهفرد خود را ارائه دهید، و همچنین فراموش نکنید که کار خوب خود را به اشتراک بگذارید. سیائو!
(Yk)
منبع: https://smashingmagazine.com/2024/08/generating-unique-random-numbers-javascript-using-sets/