Javascript - Math.random 嵌套循环内 returns 每次都是相同的序列
Javascript - Math.random inside nested loop returns same sequence every time
我正在尝试在嵌套循环内随机化值:
let bools = {
first: true,
second: true,
third: true,
fourth: true,
fifth: true,
};
results = [];
for (let i = 0; i < 3; i++) {
for (let k in bools) {
bools[k] = Math.random() > 0.5;
console.log(bools[k]);
}
results.push({ i, bools });
}
console.log(results);
i 的每次迭代结果都是相同的序列。我对此感到困惑,并尝试使用性能时间戳而不是随机数:
bools[k] = now() // from performance-now node package
并且它也为每次迭代返回相同精度的时间戳序列。这告诉我的是内循环只有一次 运行 。为什么不是外部 for 循环的每次迭代?我该如何解决这个问题?谢谢 :)
尝试替换:
results.push({ i, bools });
与:
results.push({ i, bools: Object.assign({}, bools) });
您一直引用同一个对象 'bools' 并不断覆盖它,所以最后您会在 'results' 数组的每个元素中看到最后一次迭代的结果。
另一方面,'Object.assign({}, bools) 每次都从 'bools' 引用创建新对象。
了解一下 here
我正在尝试在嵌套循环内随机化值:
let bools = {
first: true,
second: true,
third: true,
fourth: true,
fifth: true,
};
results = [];
for (let i = 0; i < 3; i++) {
for (let k in bools) {
bools[k] = Math.random() > 0.5;
console.log(bools[k]);
}
results.push({ i, bools });
}
console.log(results);
i 的每次迭代结果都是相同的序列。我对此感到困惑,并尝试使用性能时间戳而不是随机数:
bools[k] = now() // from performance-now node package
并且它也为每次迭代返回相同精度的时间戳序列。这告诉我的是内循环只有一次 运行 。为什么不是外部 for 循环的每次迭代?我该如何解决这个问题?谢谢 :)
尝试替换:
results.push({ i, bools });
与:
results.push({ i, bools: Object.assign({}, bools) });
您一直引用同一个对象 'bools' 并不断覆盖它,所以最后您会在 'results' 数组的每个元素中看到最后一次迭代的结果。 另一方面,'Object.assign({}, bools) 每次都从 'bools' 引用创建新对象。 了解一下 here