【发布时间】:2021-03-15 20:05:25
【问题描述】:
我尝试用 9999 组不同的值 m[i][random] 填充数组 s,代码如下:
let m = [[22,0],[53,0],[64,0],[45,0],[34,0]];
let l = m.length;
let s = [];
for (let j = 0; j < 9999; j++)
{
for(let i = 0; i < m.length; i++)
{
let x = Math.floor(Math.random()*l);
m[i][1] = x;
}
s.push(m);
}
但我得到相同的值:
console.log(s)
[ [ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ], ...]
我做错了什么?如何解决?
【问题讨论】:
-
您必须在外循环的每次迭代中制作
m的新副本。 -
调试此类问题的提示: 您可以记录外循环前几次迭代的
s的值。在这种情况下,这将排除一个可能的问题(每次产生相同的随机值)并帮助识别实际问题(来自先前迭代的随机值被最新迭代的随机值替换)。这将使您更接近根本原因(s包含对 same 数组m的重复引用,因此对m的新更新会将您之前添加的内容更改为s)。跨度>
标签: javascript arrays for-loop random