문법 · JS · intermediate

객체·Map·Set

키-값 저장, 유일 집합, 언제 plain object를 쓰는지.

배우기 · JavaScript 문법 · 16분 · 6/10 · javascript · 해시

이 트랙 목차 (10)
  1. 1. 값·변수·타입: let, const, Number, String
  2. 2. 조건과 논리: if, else, &&, ||, 삼항
  3. 3. 반복: for, while, for...of, 배열 메서드
  4. 4. 함수: 선언, 화살표, 스코프, 순수 함수
  5. 5. 배열과 문자열 다루기
  6. 6. 객체·Map·Set
  7. 7. 비동기 맛보기 (문제 범위 밖이지만)
  8. 8. 오류 읽기: TypeError · undefined · 스택
  9. 9. 정규식 맛보기: test · match · replace
  10. 10. JSON 파싱 맛보기

Plain object

const o = { a: 1 };
o.b = 2;
o['c'] = 3;
Object.keys(o);
Object.values(o);
Object.entries(o);

키는 문자열(또는 심볼)로 강제됩니다. 숫자 키도 문자열 '1'이 됩니다.

Map

키가 객체여도 되고, 삽입 순서를 유지하며, .size가 있습니다.

const m = new Map();
m.set('a', 1);
m.get('a');
m.has('a');
m.delete('a');
for (const [k, v] of m) { /* ... */ }

알고리즘에서 문자→개수, 값→인덱스에 Map이 잘 맞습니다.

Set

const set = new Set([1, 2, 2, 3]); // 1,2,3
set.add(4);
set.has(2);
[...set]; // 배열로

중복 제거 + 멤버십 검사에 사용합니다. JS Set은 삽입 순서를 지킵니다.

object vs Map 선택

구조 분해

const { a, b = 0 } = obj;
const [x, y] = arr;

입력 파싱 후에도 자주 씁니다.

애너그램·빈도 패턴

function freq(s) {
  const m = new Map();
  for (const ch of s) m.set(ch, (m.get(ch) || 0) + 1);
  return m;
}

두 Map의 크기가 같고 모든 키가 같은 횟수면 애너그램.

object 프로토타입 함정

{}에 사용자 문자열 키를 넣을 때 __proto__ 같은 키가 섞일 수 있습니다.
임의 키면 Map 또는 Object.create(null).

JSON

JSON.stringify({ a: 1 });
JSON.parse('{"a":1}');

채점 입력이 JSON인 문제는 드물지만, 디버그에 유용합니다.

관련 짧은 원리

관련 문제