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