javascript - js完全打乱数组
问题描述
var arr = [0,1,2,3,4,5,6,7]
完全打乱,要求,每个元素的位置必须要变动
问题解答
回答1:首先,题主并不是要传统的数组乱序,如果是传统的数组乱序,当然首推 Fisher-Yates,Math.random() 的黑科技并不能保证概率的一致,详情可以看我以前的分析 https://github.com/hanzichi/u...
如果每个位置都需要变动,随便写了一段代码,勉强可以用:
function shuffle(a) { let len = a.length; let shuffled = Array(len); for (let i = len; i--; ) { let rand = ~~(Math.random() * i); shuffled[i] = a[rand]; a[rand] = a[i]; } return shuffled;}
新建了一个数组,并且污染了原数组,很不优雅,题主可以自己改进下
回答2:把最后一个放第一个就实现了每个元素都动了,可是完全打乱是什么意思?
var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1];arr.splice(arr.length - 1, 1);arr.unshift(last) 回答3:
随机是不可能保证每个位置都变动的。
要彻底打乱,就不能保证位置都变。
笨一点的方法就是打乱一次,再跟数组做比较,直到符合条件为止。
回答4:刚没看清 , 这个可以吗?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) }}回答5:
function compare(a , b){Math.random > 0.5 ? return -1 ; return 1 } arr.sort(compare); 回答6:
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;};回答7:
随机平移,凯撒加密红红火火……
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))}回答8:
最简单的位置全都动
> 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 ]
位置全都动其实并不是最乱的;
最乱的应该是随机洗牌,有一定概率保持某个数不动,这样才没规律可循。
相关文章:
1. javascript - 请教如何获取百度贴吧新增的两个加密参数2. javascript - 使用百度文本编辑器ueditor不显示样式问题3. 前端 - 使用css3 rem设置百分比出现的问题?4. javascript - 遇到一个奇怪的现象,按钮可以拖动到编辑框中5. javascript - 七牛上传图片的问题6. java - controller返回的String,并没有这个地址啊?7. css - 如何使一个 inline-block 元素的子元素自动填充8. 致命错误: Class ’appfacadeTest’ not found9. 为什么php修改数据无法同步到数据库,只是当前页面修改成功?10. javascript - 微信“分享到朋友圈”自定义分享内容,无法成功调用jssdk接口,不知为何
