본문 바로가기

언어(JS,TS)/JavaScript

JavaScript [공부: 위치바꾸기(swap)]

위치를 바꾸는 3가지 방법

1.  임시 변수 활용

// 1) 임시 변수를 활용한 방법
function swap(idx1, idx2, arr) {
  let temp = arr[idx1];
  arr[idx1] = arr[idx2];
  arr[idx2] = temp;
}

 

2. Destructuring assignment 활용 (구조분해 할당)

// 2) Destructuring assignment를 활용한 방법
function swap(idx1, idx2, arr) {
  // arr이 reference type이라 가능
  [arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]];
}

 

3.  XOR 연산을 활용

// 3) XOR 연산을 활용한 방법
function swap(idx1, idx2, arr) {
  // arr이 reference type이라 가능
  arr[idx1] ^= arr[idx2];
  arr[idx2] ^= arr[idx1];
  arr[idx1] ^= arr[idx2];
}

저는 처음에 이게 가능한 이유를 몰랐습니다. 그런데 콘솔로 찍고 조금만 고민하니 이유를 찾았습니다. (ref)

5;         // 00000000000000000000000000000101
3;         // 00000000000000000000000000000011
6;         // 00000000000000000000000000000110
let a = [5, 3];
function swap(idx1, idx2, arr) {
  console.log('1-arr:', arr); // 1-arr: [ 5, 3 ]
  arr[idx1] ^= arr[idx2];
  console.log('2-arr:', arr); // 2-arr: [ 6, 3 ]
  arr[idx2] ^= arr[idx1];
  console.log('3-arr:', arr); // 3-arr: [ 6, 5 ]
  arr[idx1] ^= arr[idx2];
  console.log('4-arr:', arr); // 4-arr: [ 3, 5 ]
}

swap(0, 1, a);
console.log('a:', a); //  a: [ 3, 5 ]