求star

开源不易,喜欢请点个star吧

Ocean Han
278 字
1 分钟
将一个数组乱序
2022-08-05

①sort + Math.random#

WARNING

​ 实际上这只是粗略的进行乱序,并不是真正意义上的”打乱”,具体原因和sort底层是如何实现的有关

let arr = [1,2,3,4,5,6]
arr.sort(() => {
    return Math.random() - 0.5
})

②洗牌算法Fisher–Yates_shuffle#

:::tip 原理

1、写下从 1 到 N 的数字

2、取一个从 1 到剩下的数字(包括这个数字)的随机数 k 3、从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最后一位 4、重复第 2 步,直到所有的数字都被取出 5、第 3 步写出的这个序列,现在就是原始数字的随机排列

简单的说:就是随机抽一个放到最后。把剩余的数继续抽,继续放到次后… …依次执行

:::

function shuffle(array) {
	var j, x, i;
	for (i = array.length; i; i--) {
		j = Math.floor(Math.random() * i);
		/*	
			x = array[i - 1];
			array[i - 1] = array[j];
			array[j] = x;
		*/
        [array[i-1],array[j]] = [array[j],array[i-1]]
	}
	return array;
}

③借助loadash中的shuffle方法#

const _ = require("lodash"); 
let array = [2, 4, 6, 9, 10];
let shuffled_array = _.shuffle(array); 
console.log(shuffled_array);
将一个数组乱序
https://blog.oceanh.top/posts/frontend/将一个数组乱序/
作者
Ocean Han
发布于
2022-08-05
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49