iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

利用30分鐘~想一個前端問題系列 第 13

利用30分鐘~想一個前端問題 Day13-shuffle

  • 分享至 

  • xImage
  •  

shuffle

Randomizes the order of the values of an array, returning a new array.

Use the Fisher-Yates algorithm to reorder the elements of the array.

const shuffle = ([...arr]) => {
  let m = arr.length;
  while (m) {
    const i = Math.floor(Math.random() * m--);
    [arr[m], arr[i]] = [arr[i], arr[m]];
  }
  return arr;
};
EXAMPLES
const foo = [1, 2, 3];
shuffle(foo); // [2, 3, 1], foo = [1, 2, 3]

隨機化一個陣列的順序,轉換一個陣列

使用了洗牌演算法,每次轉換都有不同的順序

Fisher-Yates演算法

Fisher-Yates算法是從array的最後一個元素開始,和他前方隨機一個位置的元素交換位置。

接下來將倒數第二個元素,和其前方隨機一個位置的元素交換位置,以此類推。

參考資料

https://gaohaoyang.github.io/2016/10/16/shuffle-algorithm/


上一篇
利用30分鐘~想一個前端問題 Day12-objectToPairs
下一篇
利用30分鐘~想一個前端問題 Day14--sleep
系列文
利用30分鐘~想一個前端問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言