코드조각: 중복없이 아이템 랜덤뽑기 (Array에서 n개 꺼내기)
2023. 12. 10. 23:50ㆍ프론트엔드 개발/JS & TS
여러 아이템이 들어있는 Array에서 아이템을 랜덤으로, 그리고 중복없이 n개 뽑아내는 로직입니다.
array를 ['a', 'b', 'c', 'd', 'e'], cnt를 3으로 하면 ['c', 'b', 'a'] 등의 식으로 랜덤으로 뽑습니다. 단, ['c', 'b', 'c'] 와 같이 중복되는 값은 나오지 않습니다.
요새 TypeScript를 사용해서 TS로 짜봤습니다.
자세한 코드는 아래를 참고하세요. 혹시 JavaScript 버전을 원하시면 댓글로 알려주세요.
/**
* @param array 아이템 리스트
* @param cnt 뽑을 아이템 개수
* @returns 랜덤으로 추출된 아이템 리스트
*/
const getItemRandomly = (array: any[], cnt: number): any[] => {
const copyArr = [...array] // splice로 인해 원본 배열이 바뀌는 것을 방지하기 위해 복사본 생성
if (copyArr.length < cnt) return copyArr;
const result = [];
while (result.length < cnt) {
const randomIndex = Math.floor(Math.random() * copyArr.length);
let item = copyArr.splice(randomIndex, 1)[0];
if (item !== undefined && !!item) {
result.push(item);
}
}
return result;
};
이밖에 다른 방법을 알고 있거나 더 효율적인 코드를 아신다면 댓글로 달아주세요. 저는 물론 많은 분들에게 큰 도움이 됩니다.
도움이 되셨다면 좋아요❤️와 댓글💬 부탁드립니다. 감사합니다😄
'프론트엔드 개발 > JS & TS' 카테고리의 다른 글
Promise 정리: async/await 사용법 & then과의 차이 (2) | 2021.04.11 |
---|---|
JS 기술면접 스터디 6주차: immutable 객체부터 이벤트 루프까지 (0) | 2019.12.30 |
JS 기술면접 스터디 5주차: Math.max()부터 프로토타입 기반 상속까지 (0) | 2019.09.27 |
[코드조각] 1부터 n까지의 합 구하기 (0) | 2019.09.26 |
JS 기술면접 스터디 4주차: 전역스코프부터 Promise까지 (0) | 2019.07.31 |