JavaScript 배열 섞기: 핵심 정리
JavaScript에서 배열의 요소 순서를 무작위로 섞는 것은 다양한 상황에서 유용하게 활용될 수 있습니다. 퀴즈 앱, 카드 게임, 랜덤 이미지 슬라이드 등 예측 불가능성을 더하고 싶을 때 배열 섞기는 필수적인 기능입니다. 이번 포스팅에서는 JavaScript에서 배열을 섞는 다양한 방법과 각 방법의 장단점, 그리고 상황에 맞는 적절한 선택 방법을 알아보겠습니다.
1. Fisher-Yates 알고리즘
가장 널리 사용되고 효율적인 방법입니다. 원본 배열을 직접 수정하며 섞습니다.
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
장점:
- 효율성: 시간 복잡도 O(n)으로 빠르게 동작합니다.
- 랜덤성 보장: 모든 요소가 균등한 확률로 섞입니다.
단점:
- 원본 배열 수정: 원본 배열을 직접 수정하므로 주의가 필요합니다.
2. sort()
메서드 활용
sort()
메서드에 랜덤한 비교 함수를 전달하여 섞습니다.
function shuffle(array) {
return array.sort(() => Math.random() - 0.5);
}
장점:
- 간결성: 코드가 매우 간단합니다.
단점:
- 랜덤성: 완벽하게 랜덤하지 않을 수 있습니다. 특히 배열 크기가 클 경우 편향될 가능성이 있습니다.
- 새로운 배열 생성: 원본 배열을 유지하고 싶다면 복사본을 만들어 사용해야 합니다.
3. 외부 라이브러리 활용 (lodash)
외부 라이브러리를 사용하는 경우 lodash의 _.shuffle()
함수를 활용할 수 있습니다.
import _ from 'lodash';
const shuffledArray = _.shuffle(originalArray);
장점:
- 편리성: 검증된 라이브러리 함수를 사용하여 안정적으로 섞을 수 있습니다.
단점:
- 외부 의존성: 외부 라이브러리를 추가해야 합니다.
결론
JavaScript에서 배열을 섞는 방법은 다양하며, 각 방법은 장단점이 있습니다. 일반적으로 Fisher-Yates 알고리즘을 사용하는 것이 가장 효율적이고 안정적입니다. 하지만 상황에 따라 다른 방법을 선택할 수도 있습니다. 예를 들어, 간단한 섞기가 필요하고 랜덤성이 중요하지 않다면 sort()
메서드를 사용할 수 있습니다. 외부 라이브러리를 이미 사용 중이라면 lodash의 _.shuffle()
함수를 활용하는 것도 좋은 선택입니다.
핵심: 배열 섞기는 JavaScript 프로그래밍에서 자주 사용되는 유용한 기술입니다. 다양한 방법을 이해하고 상황에 맞는 최적의 방법을 선택하여 코드의 효율성과 안정성을 높이세요!
'개발' 카테고리의 다른 글
JavaScript: 두 배열을 순차적으로 섞는 방법 (1) | 2024.09.24 |
---|---|
맥북 화면 분할, 이제 마그넷으로 끝! 🧲 (1) | 2024.09.03 |
CloudFront Function를 이용한 Host Redirect (1) | 2024.06.26 |
Redis & K8S 포트포워딩 그리고 DEL (0) | 2023.07.19 |
Plotly js, xAxis time series 빈 데이터 제거. aka 휴일 제거 (0) | 2022.04.12 |