js打乱数组顺序 Shuffle

最容易想到的做法
[1,2,3,4,5,6,7].sort(() => Math.random() > .5)
但这个不是真正的乱序,元素大概率还是会留在原本的位置。

最完美的解决办法 -- Fisher–Yates shuffle 洗牌算法
很简单的代码实现

Array.prototype.shuffle = function() {
  let array = this;
  let len = array.length;
  for (let i = len - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
}

原理如图(图片来自知乎):





首先:从数组末尾开始,随机选择一个元素与其交换位置。
交换后,最后一位固定下来,从倒数第二位开始重复上面的交换。



以此类推,完成所有交换。

demo地址: https://nowheretorun.github.io/shuffle_sort/

参考链接:
维基百科
知乎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容