[javascript] 임의의 값으로 배열 만들기

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);

http://jsfiddle.net/robert/tUW89/


답변

.. 내가 얻는 배열은 거의 무작위 화되지 않습니다. 연속적인 숫자 블록을 많이 생성합니다.

무작위 항목의 시퀀스는 종종 연속적인 숫자 블록을 포함합니다 . Gambler ‘s Fallacy를 참조하십시오 . 예를 들면 :

.. 우리는 4 개의 앞면을 연속으로 던졌습니다. .. 5 번 연속 앞면이 나올 확률이 1⁄32에 불과하기 때문에 도박꾼의 오류에 노출 된 사람은 다음 번에 앞면이 앞면이 될 가능성이 적다고 생각할 수 있습니다. 꼬리입니다.
http://en.wikipedia.org/wiki/Gamblers_fallacy