javascript - 在js中洗牌多维数组
问题描述
这个函数只洗牌矩阵[y],但我希望它洗牌矩阵[y][x],但它不想正确洗牌。
我使用的代码:
function Shuffle(arguments) {
for (var k = 0; k < arguments.length; k++) {
var i = arguments[k].length;
if (i == 0)
return false;
else {
while (--i) {
var j = Math.floor(Math.random() * (i + 1));
var tempi = arguments[k][i];
var tempj = arguments[k][j];
arguments[k][i] = tempj;
arguments[k][j] = tempi;
}
return arguments;
}
}
return arguments
}
var matrix = [
];
var ab = 36;
for (var y = 0; y < ab; y++) {
matrix.push([])
for (var x = 0; x < ab; x++) {
matrix[y][x] = Math.floor(Math.random() * 1)
}
for (var x = 0; x < ab / 2; x++) {
matrix[y][x] = 1
}
}
arr = Shuffle(matrix);
console.log(arr)
var side = 16;
function setup() {
createCanvas(arr[0].length * side, arr.length * side);
background('#acacac');
frameRate()
}
function draw() {
for (var y = 0; y < arr.length; y++) {
for (var x = 0; x < arr[y].length; x++) {
if (matrix[y][x] == 0) {
fill(0, 255, 0)
rect(y * side, x * side, side, side)
} else if (matrix[y][x] == 1) {
fill("red")
rect(y * side, x * side, side, side)
} else if (matrix[y][x] == 2) {
fill(255, 255, 0)
rect(y * side, x * side, side, side)
} else if (matrix[y][x] == 3) {
fill(255, 0, 0)
rect(y * side, x * side, side, side)
}
}
}
}
所以这个函数只打乱矩阵[y],但我希望它打乱矩阵[y][x]。有任何想法吗?这是屏幕截图:
.
解决方案
您可能可以将其转换为一维数组,然后随机播放,然后再转换回来。你只需要知道你想要多少行。
const myArr = [[1,2],[3,4]];
const oneDimArr = myArr.reduce((a, b) => [...a, ...b], []);
const shuffledArr = Shuffle(oneDimArr); // this is your existing function
const shuffled2DimArr = shuffledArr.reduce((acc, i) => {
if(acc[acc.length-1].length >= 2) { // here we build 2 cols
acc.push([]);
}
acc[acc.length-1].push(i);
return acc;
}, [[]]);
推荐阅读
- python-3.x - 是否可以在 __name__ == '__main__' 块中获取要执行的脚本的内容(其文件名或内容)?
- python - 为什么建议不要在 conda 基础环境中安装额外的包?它的目的是什么?
- ruby - Jekyll:不允许操作@ apply2files
- python - Python,getopt,如何获取列表
- angular - 使用 i18n 角度翻译列表项
- ruby-on-rails - 如何验证关联的每个实例的限制,而不是 Rails 中的关联本身
- c# - 在 foreach 控制循环中缺少一些 Button.attributes
- apache-poi - 使用 apache-poi 使用来自放心 json 响应的值更新 excel
- javascript - 在 Typescript 的同一类中从另一个方法调用方法
- php - HTTP服务器可以将结构化文件目录中的多个文件发送到浏览器吗