_.shuffle

Džeko.Log·2021년 2월 22일
0

추가과제

목록 보기
1/3
_.shuffle = function (arr) { 
  let arrCloned = arr.slice();
  // 원본 배열을 건드리지 않는 slice 메소드를 활용하여 새로운 배열을 arrCloned에 할당해준다.
  for (let fromIdx = 0; fromIdx < arr.length; fromIdx++) {
    // for반복문을 사용하여 배열을 순회한다.
    const toIdx = Math.floor(Math.random() * arr.length);
    // 상수로 선언 된 toIdx에 랜덤된 새로운 배열을 할당한다.
    let temp = arrCloned[fromIdx];
    // 변수 temp에 arrCloned의 각 인덱스들의 값을 할당해준다.
    arrCloned[fromIdx] = arrCloned[toIdx];
    // 배열을 순회할 때 접근한 각 인덱스들의 값을 랜덤으로 새로 생성된 정수를 인덱스로 하는 값 toIdx에 할당해준다.
    arrCloned[toIdx] = temp;
  }
  // 새로 생성된 값을 temp로 할당한다.
  return arrCloned;
};
// 랜덤으로 새롭게 재배치된 배열을 리턴해준다.

_.shuffle은 배열 요소의 순서가 랜덤하게 변경된 새로운 배열을 리턴합니다.

slice는 원본 배열을 건드리지 않고 begin부터 end(end 미포함)까지의 새로운 배열을 가져온다.

Math.floor() 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환합니다.(내림), 정수를 반환하는 메소드 (소숫점 X)

Math.random() 은 0~1 사이의 실수를 반환한다.
랜덤하게 수를 정해주는 클래스, Math.random = 랜덤의 난수를 반환하는 메소드

위 코드를 다시 한번 풀어보자면,
1) slice메소드를 활용하여 원본 배열을 건드리지 않는(얕은 복사) 새로운 배열을 변수 arrCloned에 할당한다.
2) for 반복문을 통해 배열을 순회하면서 toIdx 랜덤의 숫자값을 선정해준다.
3) arrCloned[fromIdx] = arrCloned[toIdx]를 통해 순서가 바뀐 즉 랜덤한 숫자들을 가진 배열을 생성하게 된다.
4) 그렇게 랜덤으로 새롭게 배치된 배열을 리턴해준다.

0개의 댓글