如何将一个js数组的顺序打乱并且又能做到完全随机打乱呢?今天在网上看到了这样一个算法,觉得思路很不错,写上来记录一下。
比如我们有这样一个数组:
1 | let arr = [1, 2, 3, 4, 5, 6] |
实现思路是这样的:
- 首先用数组的最后一个值
arr[arr.length - 1]
来与前面的5个值中随机抽取一个值交换位置。 - 在上一步中我们已经把数组末尾的值调换了位置,接着按照同样的方法对倒数第二个值进行同样的操作,再调换一次位置。
- 对下一个值执行相同的操作,直到全部执行完毕(执行到数组的第二个值就可以了)。
下面我们用代码来实现一下:
1 | let arr = [1, 2, 3, 4, 5, 6] |
结果如我们所愿,数组被成功打乱了。下面再上一个优化了代码数量后的版本(方法一样,只是简化了代码量,第一个方法便于读者理解):
1 | let arr = [1, 2, 3, 4, 5, 6] |
算法转载自知乎