[JS알고리즘] 맨 처음의 값을 제외한 나머지 배열을 반환 | 가장 마지막 인덱스의 값을 제외한 나머지 배열


Q) 맨 처음의 값을 제외한 나머지 배열을 반환


function cutFirstIdx(arr) {
  // 여기에 코드를 작성하세요
  arr.shift();
  return arr;
}

배열에서 가장 첫번째 인덱스를 삭제하는 내장함수는 shift() 함수이다




Q) 가장 마지막 인덱스의 값을 제외한 나머지 배열을 찾은 후 [ 원본 배열, 마지막이 제거된 배열 ] 형태를 가지는 새로운 2차원 배열을 리턴

- 원본 배열이 수정되어서는 안됩니다. (얕은 복사와 깊은 복사의 차이점을 이용하세요)

function cutLastIdx(arr) {
  // 여기에 코드를 작성하세요
  let arr1 = arr;
  let arr2 = [...arr1];
  let result = [];

  arr2.pop();
  result = [arr1, arr2];
  return result;
}

얇은복사와 깊은복사에 대해 알아야만 하는 문제였다.

처음에는

let arr1 = arr;
let arr2 = arr1;

이라고 코드를 짰는데 상식적으로 생각해보면 arr2이 바뀐다고 arr이 바뀌면 안되는건데 arr도 동시에 바뀜…

이렇게 동시에 바뀌는걸 얕은복사(shallow copy) 라고 한다.

객체를 복사할 때, 해당 객체만 복사하여 새로운 객체를 만들어내는 방식이고,

깊은복사(deep copy) 는 당연히 얕은복사와 반대라고 생각하면 된다.

해당객체와 인스턴스까지 복사해서 한 객체가 복사되더라도 다른 객체의 데이터에는 영향을 주지않는다.

이럴때 사용할 수 있는게 spread operator(...)인데,

이 스프레드 오퍼레이터를 사용하면 원본의 값은 건드리지않고 복사한 객체만 사용하게 된다.

` let arr2 = […arr1];` 이렇게 사용했음!




© 2018. by sora

Powered by sora