728x90
반응형
자바스크립트에서 배열 내부의 항목들을 마구 뒤썩어주는 방법을 찾아 보니, 다양한 방법들이 있었는데, 그 중에서 쓸만한 방법들을 정리해 둡니다.
함수로 이용할 때는 다음과 같이 shuffleArray()라는 함수를 만들어서 이용하면 편리할 것 같습니다.
function shuffleArray(a){//array
let c=a.length;let b=d=c;while(c)b=Math.random()*(--c+1)|0,d=a[c],a[c]=a[b],a[b]=d
}
위 함수를 임의의 배열에 적용한 결과는 다음과 같습니다.
>> let unshuffled = ['hello', 'a', 't', 'q', 1, 2, 3, {cats: true}]
>> unshuffled
(8) ['hello', 'a', 't', 'q', 1, 2, 3, {…}]
>> shuffleArray(unshuffled)
>> unshuffled
(8) ['a', 1, 2, 'q', 'hello', {…}, 't', 3]
위에서 정의한 shuffleArray() 함수를 읽기 쉽게 풀어보면 아래와 같습니다.
function shuffleArray( array ){
var count = array.length,
randomnumber,
temp;
while( count ){
randomnumber = Math.random() * count--0; // cast int ; remove decimal
temp = array[count];
array[count] = array[randomnumber];
array[randomnumber] = temp
}
}
함수를 이용하여 위하여 파일을 참조하는 등이 귀찮다면, 다음과 같이 한 줄을 인라인하여 간단하게 처리할 수도 있습니다.
>> unshuffled.sort(() => Math.random() - 0.5);
(8) ['q', 't', 1, 'hello', 'a', {…}, 3, 2]
>> unshuffled.sort(() => Math.random() - 0.5);
(8) [1, {…}, 't', 'a', 3, 'hello', 'q', 2]
하지만 위와 같은 방식은 간편하지만, 편향적이라 임의대로 뒤섞는 것이 중요할 경우에는 이용하면 안됩니다.
참고자료
- "How to randomize (shuffle) a JavaScript array?":https://stackoverflow.com/questions/2450954/
'프로그래밍 > Node.js' 카테고리의 다른 글
[NodeJS] readFile, readFileSync - 리눅스와 윈도우간 차이점 (0) | 2023.11.19 |
---|---|
[javascript] 실수를 정수형으로 바꾸기(소수점 버리기) (0) | 2023.11.13 |
[nodejs] 구글 2FA 인증을 통한 SMTP 메일 발송 오류 해결기 (0) | 2022.10.19 |
[nodejs] VSCode 디버그 콘솔에 winston 로그가 출력되지 않는 문제 (0) | 2022.08.04 |
Node.js MySQL 연동 - INSERT (0) | 2021.05.22 |