아하
생활

생활꿀팁

향기로운파리253
향기로운파리253

javascript 무작위로 섞기 질문

_.suffle = function (arr) { let arrCloned = arr.slice(); for (let fromIdx = 0; fromIdx < arr.length; fromIdx++) { const toIdx = Math.floor(Math.random() * arr.length); let temp = arrCloned[fromIdx]; arrCloned[fromIdx] = arrCloned[toIdx]; arrCloned[toIdx] = temp; // 이부분 } return arrCloned; };

arrCloned[toIdx] = temp 부분이 이해가 잘 안됩니다 바로 윗 코드인 arrCloned[fromIdx] = arrCloned[toIdx] 로 인해서

arrCloned[fromIdx]의 값은 랜덤생성된 난수인덱스에 해당하는 값으로 변경된 상태아닌가요?

그럼 arrCloned[toIdx] = temp 여기서 temp도 바뀌어 있어야 하는게 아닌가 궁금합니다.

숫자로 예를들면 [1,2,3,4,5] 라는 arr를 입력받고 arrCloned에 복사한 값을 할당

for문은 이제 시작했다고 치고 랜덤생성된 난수는 2라고 가정하겠습니다.

arrCloned[fromIdx] = arrCloned[toIdx] 코드를 통해 arrCloned[0]의 값을 arrCloned[2] 의 값으로 바꾼다

그렇게되면 [3,2,3,4,5] 가 된상태이고 바로아랫코드인 arrCloned[toIdx] = temp; 에서 temp는

arrCloned[fromIdx] 이니 arrCloned[0]과 같다 위 코드로 바뀐상태이니 arrCloned[0]은 3이다.

그럼 arrCloned[toIdx]에다가 3을 넣어준다 이렇게되면 뭔가 이상해지는데 제가 디버그 돌려보니까

제 생각과는 다르게 arrCloned[toIdx] = temp 이부분에서 처음 받았던 배열의 0번째 인덱스를 가져오더라구요.. 이유가 정말 궁금합니다..

    2개의 답변이 있어요!