코드조각: 중복없이 아이템 랜덤뽑기 (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;
};

이밖에 다른 방법을 알고 있거나 더 효율적인 코드를 아신다면 댓글로 달아주세요. 저는 물론 많은 분들에게 큰 도움이 됩니다.

도움이 되셨다면 좋아요❤️와 댓글💬 부탁드립니다. 감사합니다😄