Skip to content

JavaScript 随机排序数组

Published: at 10:46 AMSuggest Changes

问题

随机排序一个数组

题解

这个方法短小快捷,但是容易出问题

[1, 2, 3, 4, 5].sort(() => 0.5 > Math.random());

数组中随机取一个 index,两者互换

function shuffle(array) {
  for (let index = 0; index < array.length; index++) {
    const element = array[index];
    const randomIndex = Math.floor(Math.random() * array.length);
    const randomElement = array[randomIndex];
    array[randomIndex] = element;
    array[index] = randomElement;
  }
  return array;
}

console.log(shuffle([1, 2, 3, 4, 5]));

网上找了一下,有优化版本的,叫 Fisher–Yates shuffle 洗牌算法,好像实现是差不多的

别问,问就是网上的算法才是最 NB 的

Array.prototype.shuffle = function () {
  var array = this;
  var m = array.length,
    t,
    i;
  while (m) {
    i = Math.floor(Math.random() * m--);
    t = array[m];
    array[m] = array[i];
    array[i] = t;
  }
  return array;
};

后记

你知道数组的 sort 的实现原理吗?能手写一个吗?


Previous Post
JavaScript 数组拍平方法
Next Post
JS 数组对象转换为树状数据