다른 값으로 for 루프에서 Math.random ()을 수행하는 방법은 무엇입니까?
Dec 04 2020
배열 s
을 9999 개의 다른 값 세트 로 채우려 고 합니다 m[i][random]
. 여기에 코드가 있습니다.
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 ] ], ...]
내가 도대체 뭘 잘못하고있는 겁니까? 그것을 고치는 방법?
답변
6 CertainPerformance Dec 04 2020 at 01:51
m
루프 외부가 아닌 루프 내부 에 하위 배열을 만듭니다 (따라서 각 반복에 대해 별도의 하위 배열이 있음). 외부에서는 각 인덱스가 가리키는 메모리에 단일 배열 만 만들었습니다.
let s = [];
for (let j = 0; j < 9999; j++)
{
let m = [[22,0],[53,0],[64,0],[45,0],[34,0]];
let l = m.length;
for(let i = 0; i < m.length; i++)
{
let x = Math.floor(Math.random()*l);
m[i][1] = x;
}
s.push(m);
}
또는 다음을 사용하여 한 번에 더 많은 기능을 사용할 수 있습니다 Array.from
.
const s = Array.from(
{ length: 2 },
() => [[22,0],[53,0],[64,0],[45,0],[34,0]]
.map(([num]) => [num, Math.floor(Math.random() * 5)])
);
console.log(s);