치다:
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);
또는 _.sampleSize
lodash 에서 메소드를 사용하십시오 .
// 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]
