美文网首页
js打乱数组顺序

js打乱数组顺序

作者: NowhereToRun | 来源:发表于2017-12-12 22:25 被阅读27次

最容易想到的做法
[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/

参考链接:
维基百科
知乎

相关文章

网友评论

      本文标题:js打乱数组顺序

      本文链接:https://www.haomeiwen.com/subject/blloixtx.html