一個簡易的隨機亂數取得小程式,可以用在抽籤或隨機取得特定數量上。
假設你現在有一筆陣列,你希望從陣列中,隨機取出 5 筆資料不重複的陣列元素,你可以造著以下的 JavaScript 函式步驟來實現這個需求。
先附上完整的程式代碼,可以直接使用:
完整程式碼
// 亂數取得陣列中的index
function getRandomIndexes(array, num) {
const indexes = [];
// 計算原始資料數
const arrayLength = array.length;
// 避免取得資料數量 num > 原始資料數量時造成的 Error
const count = num < array.length ? num : array.length;
while (indexes.length < count) {
const randomIndex = Math.floor(Math.random() * arrayLength);
if (!indexes.includes(randomIndex)) {
indexes.push(randomIndex);
}
}
return indexes;
}
// 對應陣列index取得資料
function getRandomElementsFromArray(array, count) {
const randomIndexes = getRandomIndexes(array, count);
const randomElements = randomIndexes.map(index => array[index]);
return randomElements;
}
const a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const random5Elements = getRandomElementsFromArray(a, 5);
console.log(random5Elements); // 這裡會印出 5 個不重複的隨機元素
它將隨機選擇陣列 a
中的 5 個不重複的元素的索引,然後將這些元素組成一個新的陣列並返回。
程式簡易說明
宣告資料來源
const a = [ 1,2,3,4,5,6,7,8,9]
亂數取得陣列中的index
寫一個function,可以輸入兩個值(資料來源, 要取得的index數量),並匯出index陣列。
function getRandomIndexes(array, num) {
const indexes = [];
// 計算原始資料數
const arrayLength = array.length;
// 避免取得資料數量 num > 原始資料數量時造成的 Error
const count = num < array.length ? num : array.length;
while (indexes.length < count) {
const randomIndex = Math.floor(Math.random() * arrayLength);
if (!indexes.includes(randomIndex)) {
indexes.push(randomIndex);
}
}
return indexes;
}
對應陣列index取得資料
寫一個fuction,他將用到上面的 getRandomIndexes(),並依據回傳的index陣列,取得原先陣列資料。
function getRandomElementsFromArray(array, count) {
const randomIndexes = getRandomIndexes(array, count);
const randomElements = randomIndexes.map(index => array[index]);
return randomElements;
}
取得資料
最後,將宣告的陣列與想要取得的數量帶入已經寫好的function,大功告成。
const random5Elements = getRandomElementsFromArray(a, 5);
console.log(random5Elements); // 這裡會印出 5 個不重複的隨機元素
發表迴響