[javascript] 자바 스크립트 배열에서 임의의 값 얻기

치다:

var myArray = ['January', 'February', 'March'];    

JavaScript를 사용하여이 배열에서 임의의 값을 선택하려면 어떻게해야합니까?



답변

간단한 원 라이너

const randomElement = array[Math.floor(Math.random() * array.length)];

const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
const randomMonth = months[Math.floor(Math.random() * months.length)];

console.log("random month =>", randomMonth);


답변

이미 밑줄 이나 lodash가 프로젝트에 포함되어 있다면를 사용할 수 있습니다 _.sample.

// will return one item randomly from the array
_.sample(['January', 'February', 'March']);

하나 이상의 항목을 무작위로 가져와야하는 경우 밑줄에서 두 번째 인수로 해당 항목을 전달할 수 있습니다.

// will return two items randomly from the array using underscore
_.sample(['January', 'February', 'March'], 2);

또는 _.sampleSizelodash 에서 메소드를 사용하십시오 .

// will return two items randomly from the array using lodash
_.sampleSize(['January', 'February', 'March'], 2);


답변

프로토 타입 방법

임의의 값을 많이 얻으려는 경우 함수를 정의 할 수 있습니다.

먼저 이것을 코드 어딘가에 넣으십시오.

Array.prototype.sample = function(){
  return this[Math.floor(Math.random()*this.length)];
}

지금:

[1,2,3,4].sample() //=> a random element

CC0 1.0 라이센스 조건에 따라 퍼블릭 도메인으로 공개 된 코드 .


답변

~~보다 훨씬 빠르 Math.Floor()므로 UI ​​요소를 사용하여 출력을 생성하는 동안 성능 최적화와 관련 ~~하여 게임 에서 승리합니다. 더 많은 정보

var rand = myArray[~~(Math.random() * myArray.length)];

그러나 Math.Floor()비트 연산자가 큰 숫자로 이상하게 작동 하기 때문에 배열에 수백만 개의 요소가 있음을 알고 있다면 Bitwise Operator와 사이를 다시 생각할 수 있습니다. 출력과 함께 설명 된 아래 예를 참조하십시오. 더 많은 정보

var number = Math.floor(14444323231.2); // => 14444323231
var number = 14444323231.2 | 0; // => 1559421343


답변

마지막 시간과 다른 무작위 항목을 선택한다고 가정하십시오 (실제로 무작위는 아니지만 여전히 일반적인 요구 사항) …

@Markus의 답변을 바탕으로 다른 프로토 타입 함수를 추가 할 수 있습니다.

Array.prototype.randomDiffElement = function(last) {
   if (this.length == 0) {
      return;
   } else if (this.length == 1) {
      return this[0];
   } else {
      var num = 0;
      do {
         num = Math.floor(Math.random() * this.length);
      } while (this[num] == last);
      return this[num];
   }
}

그리고 다음과 같이 구현하십시오.

var myRandomDiffElement = myArray.randomDiffElement(lastRandomElement)


답변

월 이름 목록과 같은 고정 값이 있고 한 줄 솔루션을 원할 경우

var result = ['January', 'February', 'March'][Math.floor(Math.random() * 3)]

배열의 두 번째 부분은 JavaScript에서 [5,6,8,7] [1,2] = 8 인 이유에 설명 된 액세스 작업입니다 .


답변

가장 짧은 버전 :

var myArray = ['January', 'February', 'March'];
var rand = myArray[(Math.random() * myArray.length) | 0]