一/二维随机数

背景如下:

一个数组[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);

  

posted @ 2012-02-13 16:20  越己  阅读(354)  评论(0编辑  收藏  举报