객체에 배열을 저장할 때 push 와 concat 의 차이점

Maria Kim·2022년 3월 23일
1

알고리즘을 풀며 객체에 배열을 저장하고 이를 늘려갈 때 나는 concat을 자주 사용했다.
if 문을 이용하여 객체에 해당 키가 있는지 유무를 확인하지 않고 바로 한 줄에 끝내 버릴 수 있었기 때문이다.
하지만 오늘 이 부분에 대해 갑자기 생각하게 되었다. 사람들은 왜 굳이 if 문을 사용할까?
이에 대해 내가 너무 얕게 고민하고 push가 아닌 concat을 사용했다는 것을 알게 되어 이 차이점을 정리해 봤다.

concat 사용 시

장점

  • 한 줄에 객체에 해당 key가 존재하든 존재하지 않던 해당 배열을 넣을 수 있다.

단점

  • 매번 새로운 배열을 만들어 해당 key에 값으로 넣는다.
  • 즉 BigO(N) 이 걸리고 새로운 주솟값이 할당된다.

function groupAnagrams(words) {
  const results = {};

  for (const word of words) {
    const sortedWord = [...word].sort().join("");
    results[sortedWord] = (results[sortedWord] || []).concat(word);
  }

  return Object.values(results);
}

push 사용 시

장점

  • 값이 존재할 때에는 기존 배열에 추가하기 때문에 BigO(1)의 시간이 걸린다.
  • 기존 주솟값을 사용한다.

단점?

  • if 문을 사용해 여러 줄을 작성해야 한다.
    (Key 값이 있을 때와 없을 때를 따로 작성)
function groupAnagrams(words) {
  const results = {};

  for (const word of words) {
    const sortedWord = [...word].sort().join("");
    if (results[sortedWord]) {
      results[sortedWord].push(word);
    } else {
      results[sortedWord] = [word];
    }
  }

  return Object.values(results);
}

💬
지금은 이렇게 하나하나 생각하며 사용해야 하지만 나중에는 자연스럽게 작성해도 알맞은 코드를 작성하게 되겠지?!! 그때는 또 어떤 고민들을 할까 기대가 된다!!

profile
Frontend Developer, who has business in mind.

0개의 댓글

관련 채용 정보