بروزرسانی: 17 تیر 1404
ایجاد اعداد تصادفی منحصر به فرد در جاوا اسکریپت با استفاده از مجموعه ها - مجله Smashing
جاوا اسکریپت دارای بسیاری از توابع داخلی است که به شما امکان می دهد عملیات های مختلفی را انجام دهید. یکی از این توابع داخلی است 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 rangeconsole.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);
بسته بندی
در این مقاله، نحوه ایجاد تصادفی سازی در جاوا اسکریپت با پوشش نحوه تولید یک سری اعداد تصادفی منحصر به فرد، نحوه استفاده از این اعداد تصادفی به عنوان شاخص برای آرایه ها، و همچنین برخی از کاربردهای عملی تصادفی سازی بحث کرده ایم.
بهترین راه برای یادگیری هر چیزی در توسعه نرم افزار، مصرف محتوا و تقویت دانشی است که از آن محتوا با تمرین به دست آورده اید. بنابراین، در اینجا متوقف نشوید. مثال های این آموزش را اجرا کنید (اگر این کار را نکرده اید)، با آن ها بازی کنید، راه حل های منحصربه فرد خود را ارائه دهید، و همچنین فراموش نکنید که کار خوب خود را به اشتراک بگذارید. سیائو!

منبع: https://smashingmagazine.com/2024/08/generating-unique-random-numbers-javascript-using-sets/