javascript - js完全打乱数组
学习ing
学习ing 2017-07-05 10:43:39
[JavaScript讨论组]
var arr = [0,1,2,3,4,5,6,7]

完全打乱,要求,每个元素的位置必须要变动

学习ing
学习ing

全部回复(7)
PHP中文网

把最后一个放第一个就实现了每个元素都动了,可是完全打乱是什么意思?

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)
     }
}
PHP中文网
    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中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号