_.shuffle

Kwangseok Kim·2020년 10월 17일
0

ㅇ 코드풀이

_.suffle = function(arr) {
  let arrCloned = arr.slice();
  //slice메소드로 원본 배열의 새로운 배열을 선언
  for(let fromIdx = 0; fromIdx < arr.length; fromIdx++) {
  //반복문을 통해 주어진 배열을 순회
    const toIdx = Math.floor(Math.random() * arr.length);
    //Math.random : 0에서 1사이의 난수를 생성
    //Math.floor : 주어진 수에 대해 정수를 반환
    //0에서 arr.length만큼의 임의의 정수를 생성하여 toIdx에 선언 
    let temp = arrCloned[fromIdx];
    //배열을 순회할 때 각 인덱스들의 값을 temp로 선언
      arrCloned[fromIdx] = arrCloned[toIdx];
      //배열을 순회할 때 각 인덱스들의 값을 임의로 생성된 정수를 인덱스로하는 값으로 할당
      arrCloned[toIdx] = temp;
      //새롭게 할당된 값을 temp로 할당
  }
    return arrCloned;
    // random하게 재배열된 arrCloned를 리턴
}

_.shuffle은 주어진 배열을 랜덤하게 섞어서 리턴하는 메소드이다.

위 코드는
배열을 순회하면서 배열의 각 인덱스값을 새로운 값으로 바꿔서 새로운 배열로 만들어 그 결과값을 리턴한다.

엄밀히 따지면 순서를 바꾸는게 아니라,
원래 배열의 각 요소들을 그 배열 내에 있는 다른 새로운 값으로 바꿔서 새로운 배열을 리턴하게 된다.

for 반복문을 통해 순서대로 배열을 순회하는 동안 이 방법을 구현하기 위해서는 먼저,

1. Math.floor(Math.random() * arr.length)를 통해 
arr.length 내의 임의의 정수를 만들어서 toIdx로 선언해주고

2. arrCloned[fromIdx]의 값을 temp로 선언해준다.

3. arrCloned[fromIdx]의 값을 arrCloned[toIdx]로 할당하고

4. 새롭게 할당된 arrCloned[toIdx]를 temp로 다시 할당해준다. 

이렇게 arr.length만큼 반복을 하게되면 순서가 바뀐 새로운 배열이 생성되고 생선된 새로운 배열을 리턴하면 된다.

코딩 공부를 시작하면서 처음에는 내가 작성하는 이 기본적인 코드들이 과연 실질적으로 어디에 어떻게 쓰일까 의구심을 가졌었는데 배움이 조금씩 쌓여갈 수록 '말도 안돼! 이 코드가 이렇게 사용될 수 있구나'라는 놀라운 깨달음이 생길 때가 종종 있다.

오늘 익힌 _.shuffle 같은 경우에는 배열 내의 정보들의 순서를 무작위로 바꾸는 메소드이기 때문에 많은 곳에 사용될 것 같은데,

내가 사용하는 것들 중에도 있을까 생각을 해보니
여러 정보들 중에 하나를 출력하는 메소드니까
매일 다르게 출력되는 papago앱의 오늘의 회화 한마디에도 이 메소드가 사용되고 있지 않을까 싶다.
오늘의 운세나 오늘의 명언 같은 것도 동일하겠지?

그리고
여러가지 테스트를 통해 경우에 수에 따른 데이터를 쌓아야 하는 그런 실험들이나
로또 번호를 생성해주는 어플리케이션같은 데에도 사용이 될 것 같다.

profile
누구나 처음은 있잖아요.

0개의 댓글