扫码关注官方订阅号
var arr = [0,1,2,3,4,5,6,7]
完全打乱,要求,每个元素的位置必须要变动
把最后一个放第一个就实现了每个元素都动了,可是完全打乱是什么意思?
var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1]; arr.splice(arr.length - 1, 1); arr.unshift(last)
随机是不可能保证每个位置都变动的。
要彻底打乱,就不能保证位置都变。
笨一点的方法就是打乱一次,再跟数组做比较,直到符合条件为止。
刚没看清 , 这个可以吗? function upset(arr){ let newArr = arr.slice().sort(() => Math.random()>0.5 ? 1 : -1) let result = arr.some((item,index)=>{ return item === newArr[index] }) if(!result){ return newArr }else{ return upset(newArr) } }
function compare(a , b){ Math.random > 0.5 ? return -1 ; return 1 } arr.sort(compare);
function shuffle (arr) {
var _floor = Math.floor, _random = Math.random, len = arr.length; for(var i = 0; i < len - 1; ++i){ var rand_pos = _floor(_random() * (len - i)) + i; if(rand_pos != i){ var tmp = arr[i]; arr[i] = arr[rand_pos]; arr[rand_pos] = tmp; } } return arr; };
随机平移,凯撒加密红红火火……
function shuffle (arr) { if (!Array.isArray(arr)) { return [] } var len = Math.floor(Math.random() * (arr.length - 1)) + 1 return arr.slice(len).concat(arr.slice(0, len)) }
最简单的位置全都动
> arr = [0,1,2,3,4,5,6,7] > arr.unshift(arr.pop()) > arr [ 7, 0, 1, 2, 3, 4, 5, 6 ] > arr.sort((a , b)=>Math.random() > 0.5 ? -1:1) [ 6, 5, 4, 0, 1, 3, 7, 2 ] > arr.sort((a , b)=>Math.random() > 0.5 ? -1:1) [ 6, 0, 5, 3, 4, 7, 1, 2 ]
位置全都动其实并不是最乱的;
位置全都动
最乱的应该是随机洗牌,有一定概率保持某个数不动,这样才没规律可循。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
把最后一个放第一个就实现了每个元素都动了,可是完全打乱是什么意思?
随机是不可能保证每个位置都变动的。
要彻底打乱,就不能保证位置都变。
笨一点的方法就是打乱一次,再跟数组做比较,直到符合条件为止。
function shuffle (arr) {
随机平移,凯撒加密红红火火……
最简单的位置全都动
位置全都动其实并不是最乱的;最乱的应该是随机洗牌,有一定概率保持某个数不动,这样才没规律可循。