我在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);
答案 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函数结果赋给变量。