Spread Operator, Set, Sort method

Minwoong Kim·2022년 9월 14일

2022-Sep-14, today getting of my comfort zone.

오늘은 주어지는 임의의 정수 배열에서 서로 다른 인덱스의 숫자를 뽑아 더한 값을, 중복없이 오름차순으로 정렬하는 함수를 작성했다.

서로 다른 인덱스의 숫자를 뽑는 알고리즘은 전에 한 번 해봐서 바로 구현할 수 있었는데, '중복없이 오름차순'에서 삽질했다....

new Set(array);

에 대한 정확한 이해없이 '그냥~ 중복 없애주는 거'라고 하고 넘어갔던 것. 그리고 sort 메서드를 배열이 아닌, 위에서 만든 Set object에 적용했던 것. 두 가지 때문에 헤맸다. 다시 한 번 정확히 공부해보자.

전개 연산자(Spread Operator)

전개 연산자란 말 그대로 배열 또는 객체의 요소들을 하나씩 펼쳐 넘겨주는 역할을 수행한다. 예를 들어 아래 코드를 살펴보자.

let array = [1,2,3];
let array_1 = [4,5,6];
let array_2 = [7,8,9];

array_1.push(array));
array_2.push(...array));

전개 연산자를 사용한 것과 사용하지 않은 것 둘의 결과값은 어떻게 달라질까?

1번 같은 경우, array 배열 하나가 통째로 push된다.
그러나 2번 처럼 전개 연산사를 사용했을 경우, 배열 요소가 펼쳐져 하나씩 push 된다.

Set 객체

new Set(만들고 싶은 배열)

위와 같은 생성자 함수로 Set 객체를 만들 수 있으며, Set 객체는 중복된 값이 존재하지 않는 배열이다. 일반 배열이 아니며, Object로 보는 것이 맞다.(length 말고 size, 오브젝트 처럼 { } 로 묶임)

Sort method

Sort 메서드 사용법은 많이 다뤘기 때문에 생략하겠다.

문제가 됐던 부분은 new Set 으로 생성했던 Set 배열에 Sort 메서드가 적용되지 않았다는 것이다.(아래 그림 참고)

왜 안될까? 아마도, Set으로 만들어진 배열이 Object이기 때문일 것이다. 그래서 혹시나 해서... Set 배열의 요소들이 Unique하다는 점을 떠올려 아래와 같이 코드를 작성해봤는데...

Object에서의 key 값들은 Unique 하다는 것을 떠올려 해봤는데 된다.

그 밖에도 Sort가 적용되지 않아 사용했던 해결책 두 가지를 더 정리해보겠다.

  1. 전개 연산자 활용
    Set 함수로 중복을 제거한 뒤, 전개 연산자로 하여금 일반 배열처럼 펼쳐지게 하여 sumArrayNew 배열에 할당했다.
  2. 처음부터 Set 사용하지 않기

    주어진 배열에서 서로 다른 인덱스의 숫자를 두 개 뽑아 더하고 push 하는 과정에서, 애초에 if 문을 활용하여 중복된 값은 push되지 않도록 하였다.

느낀점

문제의 난이도 자체는 쉬웠으나, 간단한 연산자와 배열 구조에 대한 정확한 이해가 없었던 탓에 시행착오를 겪었다. 이를 계기로 알고 활용하는 것이 중요하다는 것을 느낄 수 있었다..
기본에 충실하자.

profile
Get out of my comfort zone

0개의 댓글