一/二维随机数

背景如下:

一个数组[0,1,2,3,4,5,6,7,8,9],把它打乱成一个新的数组,这是一维随机

如果数组是二维的,打乱成一个新的数组,这是二维随机


一维随机很简单,就拿这个例子说事,如下:

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function randomArr(arr) {
    var newArr = [],
        map = {}, // key是数组索引
        len = arr.length;
    while(newArr.length < len) {
        // 获得数组的随机索引值
        var index = Math.floor(Math.random() * len);
        if (!map[index]) {
            map[index] = 1;
            newArr.push(arr[index]);
        }
    }
    return newArr;
}
randomArr(arr);


二维随机稍微复杂些,有点像拼图游戏的感觉,把原本正确的顺序全部打乱。

// arr是二维数组
var arr = [
    ['0-0', '0-1', '0-2', '0-3'],
    ['1-0', '1-1', '1-2', '1-3'],
    ['2-0', '2-1', '2-2', '2-3'],
    ['3-0', '3-1', '3-2', '3-3']
];
function randomArr(arr) {
    var newArr = [],
        rows = arr.length,
        cols = arr[0].length;
    
    var row, col, ok;
    for (var i = 0; i < rows; i++) {
        newArr[i] = [];
        for (var j = 0; j < cols; j++) {
            ok = false;
            while(!ok) {
                row = Math.floor(Math.random() * rows);
                col = Math.floor(Math.random() * cols);
                if (arr[row][col] !== false) {
                    ok = true;
                }
            }
            newArr[i][j] = arr[row][col];
            arr[row][col] = false;
        }
    }
    return newArr;
}
randomArr(arr);

  

转载于:https://www.cnblogs.com/zhujl/archive/2012/02/13/2349530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值