在JS中改组多维数组

iko子

该函数仅对matrix [y]进行洗牌,但是我希望它对matrix [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)
            }
        }
    }
}

因此,此函数仅可重排matrix [y],但我希望它可重排matrix [y] [x]。有任何想法吗?这是屏幕截图:

在此处输入图片说明

克里斯·李

如注释中所述,您在while循环之后有一个return语句,导致forloop从未按预期完成

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; // remove this line
        }
    }
    return arguments
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章