0부터 39까지의 임의 값을 사용하여 40 개의 요소로 배열을 어떻게 만들 수 있습니까? 처럼
[4, 23, 7, 39, 19, 0, 9, 14, ...]
여기에서 솔루션을 사용해 보았습니다.
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
그러나 내가 얻는 배열은 거의 무작위 화되지 않습니다. 연속적인 숫자 블록을 많이 생성합니다.
답변
다음은 고유 번호 목록을 섞는 솔루션입니다 (반복 없음).
for (var a=[],i=0;i<40;++i) a[i]=i;
// http://stackoverflow.com/questions/962802#962890
function shuffle(array) {
var tmp, current, top = array.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
}
a = shuffle(a);
반복 된 값 (OP가 원하는 것이 아님)을 허용하려면 다른 곳을 찾으십시오. 🙂
답변
최단 접근법 (ES6)
// randomly generated N = 40 length array 0 <= A[N] <= 39
Array.from({length: 40}, () => Math.floor(Math.random() * 40));
즐겨!
답변
ES5 :
function randomArray(length, max) {
return Array.apply(null, Array(length)).map(function() {
return Math.round(Math.random() * max);
});
}
ES6 :
randomArray = (length, max) => [...new Array(length)]
.map(() => Math.round(Math.random() * max));
답변
더 짧은 ES6 접근 방식 :
Array(40).fill().map(() => Math.round(Math.random() * 40))
또한 인수가있는 함수를 가질 수 있습니다.
const randomArray = (length, max) =>
Array(length).fill().map(() => Math.round(Math.random() * max))
답변
최단 🙂
[...Array(40)].map(e=>~~(Math.random()*40))
답변
Math.random()
0과 1 (배타적) 사이의 숫자를 반환합니다. 따라서 0-40을 원하면 40으로 곱할 수 있습니다. 가장 높은 결과는 곱한 값입니다.
var arr = [];
for (var i=0, t=40; i<t; i++) {
arr.push(Math.round(Math.random() * t))
}
document.write(arr);
답변
.. 내가 얻는 배열은 거의 무작위 화되지 않습니다. 연속적인 숫자 블록을 많이 생성합니다.
무작위 항목의 시퀀스는 종종 연속적인 숫자 블록을 포함합니다 . Gambler ‘s Fallacy를 참조하십시오 . 예를 들면 :
.. 우리는 4 개의 앞면을 연속으로 던졌습니다. .. 5 번 연속 앞면이 나올 확률이 1⁄32에 불과하기 때문에 도박꾼의 오류에 노출 된 사람은 다음 번에 앞면이 앞면이 될 가능성이 적다고 생각할 수 있습니다. 꼬리입니다.
http://en.wikipedia.org/wiki/Gamblers_fallacy