การสุ่มตัวเลข ในภาษา JavaScript

การสุ่มตัวเลข (Random numbers) คือการสร้างตัวเลขแบบสุ่มขึ้นมาด้วยวิธีการทางคอมพิวเตอร์ โดยวิธีที่เป็นที่นิยมคือการใช้อัลกอริทึม Pseudorandom number generator (PRNG) ในการเขียนโปรแกรมการสุ่มตัวเลขนั้นเป็นเรื่องปกติที่ต้องเจอ ยกตัวอย่างเช่น การสุ่มสิ่งของในเกม หรือการสุ่มค่าทางสถิติสำหรับการจำลองข้อมูล เป็นต้น

ในบทนี้ คุณจะเรียนรู้เกี่ยวกับการสุ่มตัวเลขในภาษา JavaScript เราจะแนะนำการใช้งานเมธอดพื้นฐานของภาษาสำหรับการสุ่มตัวเลข และตัวอย่างการประยุกต์ใช้การสุ่มตัวเลขในการเขียนโปรแกรม นี่เป็นเนื้อหาในบทนี้

  • ฟังก์ชัน Math.random()
  • การสุ่มตัวเลขจาก 1 - 100
  • การสุ่มตัวเลขจากช่วงที่กำหนด Min - Max
  • ตัวอย่างการสุ่มค่าในอาเรย์

ฟังก์ชัน Math.random()

ในภาษา JavaScript นั้นเราสามารถสุ่มตัวเลขได้โดยการใช้เมธอด Math.random() ซึ่งเมธอดใช้อัลกอริทึม Pseudorandom number generator (PRNG) ในการสุ่ม นี่เป็นรูปแบบการใช้งาน

let result = Math.random();

เมธอด Math.random() เป็นเมธอดที่ใช้สำหรับสุ่มตัวเลขในภาษา JavaScript มันส่งค่ากลับเป็นตัวเลขจำนวนจริงที่มีค่าอยู่ระหว่าง 0.0 - 1.0 (ไม่รวม 1.0) นั่นหมายความว่าค่าจริงๆ ที่เมธอดนี้สามารถสุ่มได้คือระหว่าง 0.0 ถึง 0.9999... ซึ่งรูปแบบการทำงานนี้เพียงพอที่จะสำหรับสุ่มตัวเลขทุกรูปแบบ

สำหรับตัวอย่างแรก เราสามารถใช้เมธอด Math.random() สุ่มตัวเลขสองตัวและแสดงผลออกทางหน้าจอ นี่เป็นตัวอย่าง

random_number.js
console.log("First:", Math.random());
console.log("Second:", Math.random());

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

First: 0.2688218586951592
Second: 0.9917350681438986

ในตัวอย่างเป็นการใช้งาน Math.random() สำหรับสุ่มตัวเลขในภาษา JavaScript ค่าที่ส่งกลับมาจากเมธอดนั้นจะเป็นตัวเลขทศนิยมที่มีค่าตั้งแต่ 0.0 แต่จะน้อยกว่า 1.0 เสมอ

แม้การทำงานของเมธอดจะส่งค่ากลับไม่เกิน 1.0 ในความเป็นจริงแล้ว นี่เป็นรูปแบบการทำงานที่ยืดหยุ่นมาก ในกรณีที่เราต้องการสุ่มตัวเลขจากช่วงอื่นๆ เราสามารถขยายขนาดของตัวเลขที่ต้องการสุ่มได้โดยการคูณค่าสูงสุดเข้าไป นี่เป็นตัวอย่าง

random_number2.js
console.log("Random number between 0 - 10");
console.log(Math.random() * 10);
console.log(Math.random() * 10);

console.log("Random number between 0 - 50");
console.log(Math.random() * 50);
console.log(Math.random() * 50);

console.log("Random number between 0 - 100");
console.log(Math.random() * 100);
console.log(Math.random() * 100);

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Random number between 0 - 10
0.9795997757683694
5.648708802710982
Random number between 0 - 50
27.66336808364741
30.119124219003435
Random number between 0 - 100
67.81886490254976
47.23183285709147

ในตัวอย่างนี้ เป็นการใช้งานเมธอด Math.random() ในการสุ่มตัวเลขจากช่วงอื่นๆ กล่าวคือเมื่อเราคูณผลลัพธ์ของการสุ่มด้วย N เราจะได้รับตัวเลขสุ่มที่เริ่มจาก 0 แต่ไม่เกิน N เช่นในตัวอย่าง เราได้คูณค่าที่ได้จากการสุ่มด้วย 100 ดังนั้นผลลัพธ์ที่ได้จะอยู่ระหว่าง 0.0 - 99.9999... นั่นเอง ซึ่งวิธีนี้ทำให้เราสามารถสุ่มตัวเลขจากช่วงใดๆ ก็ได้

การสุ่มตัวเลขจาก 1 - 100

ในตัวอย่างก่อนหน้าเป็นการสุ่มตัวเลขโดยตัวเลขที่สุ่มได้นั้นมีค่าเริ่มตั้นจาก 0 เสมอ และนั่นเป็นการทำงานของพื้นฐานของเมธอด และอย่างที่คุณเห็นเราสามารถคูณค่าสูงสุดเข้าไปเพื่อขยายขนาดของตัวเลขที่ต้องการสุ่มได้

ในตัวอย่างนี้ จะเป็นการเขียนโปรแกรมเพื่อสุ่มตัวเลขจาก 1 - 100 แทน โดยการปรับใช้เทคนิคที่เราได้ใช้ไปก่อนหน้า พร้อมกับปรับปรุงโค้ดเพิ่มเติมเพื่อให้ตัวเลขที่สุ่มได้เริ่มต้นจาก 1 นี่เป็นโปรแกรมสำหรับสุ่มตัวเลขจาก 1 - 100 ในภาษา JavaScript

random_number3.js
let num = Math.floor(Math.random() * 100) + 1;
console.log(num);

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

89

ในตัวอย่างนี้เป็นการสุ่มตัวเลขจาก 1 - 100 การทำงานนั้นเรียบง่ายเพราะมันคือการคำนวณทางคณิตศาสตร์พื้นฐาน ต่อไปเป็นการอธิบายว่าโปรแกรมทำงานอย่างไร

  1. ในคำสั่ง Math.random() * 100 เป็นการสุ่มตัวเลขระหว่าง 0.0 - 99.9999..
  2. แปลงตัวเลขให้เป็นจำนวนเต็มด้วยเมธอด Math.floor() นั่นจะทำให้ค่าที่ได้เป็น 0 - 99 แทน
  3. บวกผลที่ได้ด้วย + 1 เพื่อทำให้ค่าที่ได้จากการสุ่มมีค่าอยู่ระหว่าง 1 - 100 ซึ่งเป็นตัวเลขในช่วงที่เราต้องการ

ดังนั้นนี่เป็นอย่างของโปรแกรมสำหรับสุ่มตัวเลขระหว่าง 1 - 100 และ 1 - 25 อย่างละ 5 หมายเลขจากนั้นแสดงมันออกทางหน้าจอ

ranged_random.js
console.log("Random number between 1 - 100");
for (let i = 0; i < 5; i++) {
    let num = Math.floor(Math.random() * 100) + 1;
    console.log(num);
}

console.log("Random number between 1 - 25");
for (let i = 0; i < 5; i++) {
    let num = Math.floor(Math.random() * 25) + 1;
    console.log(num);
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Random number between 1 - 100
72
11
96
55
22
Random number between 1 - 25
4
24
15
21
20

ในตัวอย่างจะเห็นว่าเราสามารถปรับใช้มันสำหรับสุ่มตัวเลขจาก 1 ถึงช่วงที่ต้องการได้ โดยเปลี่ยนตัวคูณเป็นตัวเลขสูงสุดของการสุ่ม ในคำสั่ง for loop แรกเป็นการวนสุ่มตัวเลขจาก 1 - 100 จำนวน 5 ตัว และในลูปที่สองจาก 1 - 25 และแสดงเลขทั้งหมดออกทางหน้าจอ

จะเห็นว่าการใช้งานเมธอด Math.random() ค่อนข้างยืดหยุด แต่จากโค้ดในตัวอย่างเราสามารถปรับปรุงการทำงานของมันให้ดีขึ้นกว่านี้ได้ นี่จะชัดเจนเมื่อเรามีโจทย์ว่า เขียนโปรแกรมเพื่อให้สุ่มตัวเลขจากช่วงที่กำหนด เช่น สุ่มจาก 50 - 100 หรือสุ่มจาก 100 - 200 และแน่นอนเพื่อทำให้โปรแกรมของเราสามารถทำเช่นนี้ได้ เราจะต้องปรับปรุงมันอีกเล็กน้อย

การสุ่มตัวเลขจากช่วงที่กำหนด Min - Max

ดังนั้นในตัวอย่างนี้เราจะเขียนโปรแกรมสำหรับสุ่มตัวเลขจากช่วงที่กำหนด เพื่อทำให้มันสนับสนุนการสุ่มตัวเลขจากช่วงใดๆ ได้ ไม่ใช่เพียงแค่ 0 - 99 หรือ 1 - 100 แต่เป็นทุกช่วงระหว่าง Min - Max นี่เป็นตัวอย่างของโปรแกรม

random_between.js
function myRandom(min, max) {
    const N = max - min + 1;
    return Math.floor(Math.random() * N) + min;
}

console.log("Random number between 50 - 100");
for (let i = 0; i < 5; i++) {
    console.log(myRandom(50, 100));
}

console.log("Random number between 100 - 200");
for (let i = 0; i < 5; i++) {
    console.log(myRandom(100, 200));
}

console.log("Random number between -20 - 20");
for (let i = 0; i < 5; i++) {
    console.log(myRandom(-20, 20));
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Random number between 50 - 100
90
53
66
91
61
Random number between 100 - 200
158
141
196
175
186
Random number between -20 - 20
14
-15
12
-13
-18

ในตัวอย่าง เป็นการเขียนโปรแกรมเพื่อสุ่มตัวเลขจากช่วงที่กำหนด เราได้แยกโค้ดส่วนของการสุ่มตัวเลขออกไปฟังก์ชัน myRandom เพื่อเรียกใช้งานแทน

function myRandom(min, max) {
    const N = max - min + 1;
    return Math.floor(Math.random() * N) + min;
}

ฟังก์ชัน myRandom รับพารามิเตอร์สองตัวคือ min และ max ซึ่งเป็นค่าที่น้อยสุดและมากสุดของตัวเลขเพื่อสุ่มตามลำดับ และส่งค่ากลับเป็นตัวเลขในช่วงของพารามิเตอร์ทั้งสอง ต่อไปเป็นคำอธิบายว่ามันทำงานอย่างไร นี่เป็นขั้นตอนการทำงานของฟังก์ชัน myRandom() เมื่อเราใช้มันสำหรับสุ่มตัวเลขจาก 50 - 100

  1. ส่งพารามิเตอร์ min = 50, max = 100 ไปยังฟังก์ชัน
  2. คำนวณหาจำนวนตัวเลขทั้งหมดจาก 50 ถึง 100 มี 51 ตัวเลข ซึ่งคำนวณได้จาก range = 100 - 50 + 1 = 51
  3. จากนั้นสุ่มตัวเลขด้วย Math.random() * 51 ค่าที่เป็นไปได้ในการสุ่มคือ 0.0 - 50.9999...
  4. แปลงตัวเลขให้เป็นจำนวนเต็มด้วยเมธอด Math.floor() ค่าที่เป็นไปได้จะเป็น 0 - 50
  5. สุดท้ายบวกค่าดังกล่าวด้วย min = 50
  6. ผลลัพธ์จากการสุ่มที่ได้จะเป็น 50 - 100

ตัวอย่างการสุ่มค่าในอาเรย์

ในตัวอย่างก่อนหน้าคุณได้เรียนรู้วิธีการใช้งานเมธอดสำหรับการสุ่มตัวเลขไปแล้ว สำหรับตัวอย่างสุดท้ายในบทนี้ เรามาเขียนโปรแกรมสำหรับสุ่มค่าในอาเรย์ ในเกมนี้เราต้องการหาผู้ชนะโดยการชนะนั้นจะได้จากการสุ่มชื่อมาจากอาเรย์ นี่เป็นโค้ดของโปรแกรม

array_random.js
let names = ["Metin", "Chris", "Jacob", "Robert", "Randy"];

let index = Math.floor(Math.random() * names.length);

let lucky = names[index];
console.log("Random index:", index);
console.log("The lucky person is:", lucky);
console.log(lucky + " had received 1000 USD");

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Random index: 1
The lucky person is: Chris
Chris had received 1000 USD

ในตัวอย่างนี้ เป็นเกมสำหรับหาผู้โชคดีมาหนึ่งคนโดยผู้ชนะคนดังกล่าวจะได้จากการสุ่มชื่อมาจากอาเรย์ และจากการรันโปรแกรมเราได้ผู้ชนะคือ Chris เขาเป็นผู้โชคดีที่ได้รับการสุ่มจากโปรแกรมของเรา

let names = ["Metin", "Chris", "Jacob", "Robert", "Randy"];

เรามีอาเรย์ names สำหรับเก็บรายชื่อของผู้เข้าร่วมเล่มเกมทั้งหมด คุณสามารถเพิ่มรายชื่อเข้าไปในอาเรย์ได้ตามต้องการเพื่อดูการทำงานของโปรแกรม

let index = Math.floor(Math.random() * names.length);

ในการสุ่มชื่อจากในอาเรย์ เราจะทำการสุ่มเอาค่า Index ของอาเรย์ เพื่อทำให้โปรแกรมยืดหยุ่นไปตามขนาดของอาเรย์ เราได้คูณค่าที่ได้จากการสุ่มด้วยขนาดของอาเรย์ ซึ่งจะทำให้ได้ค่าจากการสุ่มเป็นช่วง Index จริงๆ ของอาเรย์ เช่นในตัวอย่างนี้ ค่าที่สุ่มได้จะอยู่ระหว่าง 0 - 4

let lucky = names[index];
console.log("Random index:", index);
console.log("The lucky person is:", lucky);
console.log(lucky + " had received 1000 USD");

ในตอนนี้เราได้ผู้ที่โชคดีที่ได้จากการสุ่มซึ่งเขาจะได้รับเงินรางวัลเป็นจำนวน 1000 USD แสดง Index ที่สุ่มได้และชื่อของเขาออกทางหน้าจอ

ในบทนี้ คุณได้เรียนรู้การสุ่มตัวเลขในภาษา JavaScript ด้วยการใช้เมธอด Math.random() เราได้แสดงวิธีการสุุ่มตัวเลขในรูปแบบต่างๆ ไม่ว่าจะเป็นการสุ่มตัวเลขจาก 1 - 100 และจากช่วงที่กำหนดเอง และสุดท้ายเป็นตัวอย่างการประยุกต์ใช้การสุ่มตัวเลขเพื่อสุ่มค่าในอาเรย์