6. Keyd collection

  • ν‚€ μ»¬λ ‰μ…˜μ€ 인덱슀 λŒ€μ‹  ν‚€λ‘œ μ •λ ¬λœ 데이터 μ»¬λ ‰μ…˜μœΌλ‘œ, ν‚€-κ°’ 쌍으둜 κ΅¬μ„±λœλ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” λ§΅(Map)κ³Ό μ§‘ν•©(Set)μ΄λΌλŠ” 두 κ°€μ§€ μœ ν˜•μ˜ ν‚€ μ»¬λ ‰μ…˜μ΄ μžˆλ‹€.

Map

  • ν‚€, κ°’ 쌍으둜 된 객체λ₯Ό 담을 수 μžˆλŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.

  • ν‚€λŠ” μœ λ‹ˆν¬ν•˜λ‹€(쀑볡 λΆˆκ°€λŠ₯). ν‚€κ°€ λ‹€λ₯΄λ‹€λ©΄ 값은 쀑볡 κ°€λŠ₯ν•˜λ‹€.

  • κ°μ²΄μ—μ„œμ˜ ν‚€λŠ” λ¬Έμžμ—΄μ΄μ–΄μ•Ό ν•˜μ§€λ§Œ, Map 은 μ–΄λ–€ νƒ€μž…λ„ κ°€λŠ₯ν•˜λ‹€.

  • μ΄ν„°λŸ¬λΈ”(순회 κ°€λŠ₯)

  • ν‚€-값이 λ“€μ–΄κ°„ μˆœμ„œλŒ€λ‘œ μˆœμ„œκ°€ 보μž₯λœλ‹€.

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ˜€λΈŒμ νŠΈμ™€ λΉ„μŠ·ν•˜λ‚˜, Map 을 μ‚¬μš©ν•˜λ©΄ 래퍼 객체의 μ—¬λŸ¬κ°€μ§€ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€. 즉, μ˜€λΈŒμ νŠΈμ™€ 맡은 μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯΄λ‹€.

생성

const map = new Map([
  ['key1', 'k'],
  ['key2', 'k'],
]);
console.log(map); // Map(2) { 'key1' => 'k', 'key2' => 'k' }

obj1 = { key1: 'k' };
const map2 = new Map([[obj1]]);
console.log(map2);

μ ‘κ·Ό

const map = new Map([
  ['key1', 'k'],
  ['key2', 'k'],
]);

console.log(map.get('key1')); // 'k;
console.log(map.get('key2')); // 'k;

// μ‚¬μ΄μ¦ˆ 확인
console.log(map.size); // 2

// 쑴재 확인
console.log(map.has('key1')); // true

// 순회
map.forEach((value, key) => console.log(key, value));

console.log(map.entries()); // [Map Entries] { [ 'key1', 'k' ], [ 'key2', 'k' ] }
console.log(map.values()); // [Map Iterator] { 'k', 'k' }
console.log(map.keys()); // [Map Iterator] { 'key1', 'key2' }

μΆ”κ°€

const map = new Map([
  ['key1', 'k'],
  ['key2', 'k'],
]);

map.set('key3', 'k');

μ‚­μ œ

const map = new Map([
  ['key1', 'k'],
  ['key2', 'k'],
]);

map.delete('key3');
map.clear();

Map 속성, λ©”μ„œλ“œ

Set

  • μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠλŠ”λ‹€.

  • κ°’μ˜ 쀑볡이 λΆˆκ°€λŠ₯ν•˜λ‹€.

  • μ΄ν„°λŸ¬λΈ”(순회 κ°€λŠ₯)

  • μˆœμ„œκ°€ 보μž₯λ˜μ–΄μžˆμ§€ μ•Šλ‹€.

const set = new Set([1, 2, 3, 4, 4]);
console.log(set); // Set(4) { 1, 2, 3, 4 }

// μ‚¬μ΄μ¦ˆ 확인
console.log(set.size); // 4

// μ•„μ΄ν…œ 확인
console.log(set.has(2)); // true

// μ•„μ΄ν…œ μΆ”κ°€, 이미 μ‘΄μž¬ν•˜λŠ” μ•„μ΄ν…œμ΄λΌλ©΄ λ¬΄μ‹œλ¨
set.add(10);
console.log(set); // Set(5) { 1, 2, 3, 4, 10 }

// μ•„μ΄ν…œ μ‚­μ œ
set.delete(1);
console.log(set); // Set(4) { 2, 3, 4, 10 }

// μ•„μ΄ν…œ μ „λΆ€ μ‚­μ œ
set.delete(1);
console.log(set); // Set(0) {}

// 객체도 set 에 λ“€μ–΄κ°ˆ 수 μžˆλ‹€.
const obj1 = { name: 'test1', age: 1 };
const obj2 = { name: 'test1', age: 1 };
const obj = new Set([obj1, obj2]);
console.log(obj); // Set(2) { { name: 'test1', age: 1 }, { name: 'test1', age: 1 } }

Question

μΈν„°νŽ˜μ΄μŠ€λž€?

μΈν„°νŽ˜μ΄μŠ€λŠ” 일반적으둜 νƒ€μž… 체크λ₯Ό μœ„ν•΄ μ‚¬μš©λ˜λ©° λ³€μˆ˜, ν•¨μˆ˜, ν΄λž˜μŠ€μ— μ‚¬μš©λ  수 μžˆλ‹€. λ˜ν•œ, μ—¬λŸ¬κ°€μ§€ νƒ€μž…μ„ κ°–λŠ” ν”„λ‘œνΌν‹°λ‘œ 이루어진 μƒˆλ‘œμš΄ νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 것과 μœ μ‚¬ν•˜λ‹€. μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ ν”„λ‘œνΌν‹° λ˜λŠ” λ©”μ„œλ“œμ˜ κ΅¬ν˜„μ„ κ°•μ œν•˜μ—¬ 일관성을 μœ μ§€ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이닀.

객체의 ν‚€λŠ” λ‹¨μˆœ λ¬Έμžμ—΄μ΄ μ•„λ‹Œ κ²½μš°μ—λŠ” 항상 λŒ€κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ (Computed Property Name)

// [JavaScript] Computed Property Name // https://velog.io/@yujuck/object-key%EC%97%90-%EB%B3%80%EC%88%98%EB%A5%BC-%EB%84%A3%EC%9C%BC%EB%A0%A4%EB%A9%B4-Computed-Property-Name // https://ui.dev/computed-property-names

Last updated