背景如下:
一个数组[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);