การสุ่มตัวเลข ในภาษา 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()
สุ่มตัวเลขสองตัวและแสดงผลออกทางหน้าจอ นี่เป็นตัวอย่าง
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
ในความเป็นจริงแล้ว นี่เป็นรูปแบบการทำงานที่ยืดหยุ่นมาก ในกรณีที่เราต้องการสุ่มตัวเลขจากช่วงอื่นๆ เราสามารถขยายขนาดของตัวเลขที่ต้องการสุ่มได้โดยการคูณค่าสูงสุดเข้าไป นี่เป็นตัวอย่าง
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
let num = Math.floor(Math.random() * 100) + 1;
console.log(num);
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
89
ในตัวอย่างนี้เป็นการสุ่มตัวเลขจาก 1 - 100 การทำงานนั้นเรียบง่ายเพราะมันคือการคำนวณทางคณิตศาสตร์พื้นฐาน ต่อไปเป็นการอธิบายว่าโปรแกรมทำงานอย่างไร
- ในคำสั่ง
Math.random() * 100
เป็นการสุ่มตัวเลขระหว่าง0.0 - 99.9999..
- แปลงตัวเลขให้เป็นจำนวนเต็มด้วยเมธอด
Math.floor()
นั่นจะทำให้ค่าที่ได้เป็น0 - 99
แทน - บวกผลที่ได้ด้วย
+ 1
เพื่อทำให้ค่าที่ได้จากการสุ่มมีค่าอยู่ระหว่าง1 - 100
ซึ่งเป็นตัวเลขในช่วงที่เราต้องการ
ดังนั้นนี่เป็นอย่างของโปรแกรมสำหรับสุ่มตัวเลขระหว่าง 1 - 100 และ 1 - 25 อย่างละ 5 หมายเลขจากนั้นแสดงมันออกทางหน้าจอ
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 นี่เป็นตัวอย่างของโปรแกรม
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
- ส่งพารามิเตอร์ min = 50, max = 100 ไปยังฟังก์ชัน
- คำนวณหาจำนวนตัวเลขทั้งหมดจาก 50 ถึง 100 มี 51 ตัวเลข ซึ่งคำนวณได้จาก range = 100 - 50 + 1 = 51
- จากนั้นสุ่มตัวเลขด้วย Math.random() * 51 ค่าที่เป็นไปได้ในการสุ่มคือ 0.0 - 50.9999...
- แปลงตัวเลขให้เป็นจำนวนเต็มด้วยเมธอด Math.floor() ค่าที่เป็นไปได้จะเป็น 0 - 50
- สุดท้ายบวกค่าดังกล่าวด้วย min = 50
- ผลลัพธ์จากการสุ่มที่ได้จะเป็น 50 - 100
ตัวอย่างการสุ่มค่าในอาเรย์
ในตัวอย่างก่อนหน้าคุณได้เรียนรู้วิธีการใช้งานเมธอดสำหรับการสุ่มตัวเลขไปแล้ว สำหรับตัวอย่างสุดท้ายในบทนี้ เรามาเขียนโปรแกรมสำหรับสุ่มค่าในอาเรย์ ในเกมนี้เราต้องการหาผู้ชนะโดยการชนะนั้นจะได้จากการสุ่มชื่อมาจากอาเรย์ นี่เป็นโค้ดของโปรแกรม
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 และจากช่วงที่กำหนดเอง และสุดท้ายเป็นตัวอย่างการประยุกต์ใช้การสุ่มตัวเลขเพื่อสุ่มค่าในอาเรย์