在javascript中随机播放多维数组得到重复

时间:2016-04-02 02:06:06

标签: javascript arrays multidimensional-array

我在javascript中乱码数组时遇到问题。 多维数组将其行洗牌两次,结果是返回相同的数字。 我不想要相同的数字,但我想要不同的洗牌结果。

this.pairs = [
    [0, 1, 2, 3]
];

this.shuffled = [
    [shuffle(this.pairs[0])],
    [shuffle(this.pairs[0])]
];

console.log(this.shuffled);

shuffle功能是:

function shuffle(array) {
for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}
return array;}

它只是随机化了数组值。

现在,当我尝试shuffle([0,1,2,3])时,如果我只调用两次相同的函数,它就可以工作。 但是当我写shuffle时(this.pairs [0]);无论我调用它多少次,它都会返回完全相同的值。有什么帮助吗?

更新 然后我按照建议尝试将它们添加到不同的变量中,仍然无效。

this.pairs = [
    [0, 1],
    [0, 1]
];

var level1 = this.pairs[0];
var level2 = this.pairs[0];

this.shuffled = [
    shuffle(level1),
    shuffle(level2)
];

console.log(this.shuffled);

同样如此:

this.pairs = [
    [0, 1],
    [0, 1]
];

var level1 = shuffle(this.pairs[0]);
var level2 = shuffle(this.pairs[0]);

this.shuffled = [
    level1,
    level2
];

console.log(this.shuffled);

3 个答案:

答案 0 :(得分:0)

问题是你正在使用this.name, 它总是指向相同的参考 所以结果将被最后一次shuffle调用覆盖。 因此,您需要在每次改组后将值复制到新变量。

答案 1 :(得分:0)

function shuffleMultiArray(multArr) {
    for (let i = 0; i < multArr.length; i++) {
        for (let j = 0; j < multArr[i].length; j++) {
            let i1 = Math.floor(Math.random() * (multArr.length));
            let j1 = Math.floor(Math.random() * (multArr.length));

            let temp = multArr[i][j];
            multArr[i][j] = multArr[i1][j1];
            multArr[i1][j1] = temp;
        }
    }
}

答案 2 :(得分:-1)

尝试将shuffle函数结果赋给变量。