생활
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개의 답변이 있어요!