紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, 未分類

[JS]JavaScript 隨機取出陣列元素值

一個簡易的隨機亂數取得小程式,可以用在抽籤或隨機取得特定數量上。

假設你現在有一筆陣列,你希望從陣列中,隨機取出 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 個不重複的隨機元素

發表迴響