다시, 자바스크립트 (8) -  셋, 위크셋, 맵, 위크맵

Junho Yun·2023년 3월 25일
0
post-thumbnail

set, weekset, map, weekmap

Set

Set란 어떠한 자료형의 값이든 각 원소를 고유하게 저장하는 객체이다.

set에서 사용할 수 있는 메소드입니다.

  • add()
  • clear()
  • delete()
  • entries()
  • forEach()
  • has()
  • keys()
  • values()
const mySet = new Set(['foo', 'bar', 'baz']);

// add a new value to the Set
mySet.add('qux');

// check if a value is in the Set
console.log(mySet.has('foo')); // true
console.log(mySet.has('xyz')); // false

// get the size of the Set
console.log(mySet.size); // 4

// delete a value from the Set
mySet.delete('bar');

// iterate over the Set using a for...of loop
for (const value of mySet) {
  console.log(value);
}
// output:
// foo
// baz
// qux

// clear all values from the Set
mySet.clear();
console.log(mySet.size); // 0

// add some values back to the Set
mySet.add('hello');
mySet.add('world');

// use the forEach() method to log each value to the console
mySet.forEach(function(value) {
  console.log(value);
});
// output:
// hello
// world

// get an iterator for the Set's entries
const entries = mySet.entries();
console.log(entries.next().value); // [ 'hello', 'hello' ]
console.log(entries.next().value); // [ 'world', 'world' ]

// get an iterator for the Set's keys
const keys = mySet.keys();
console.log(keys.next().value); // 'hello'
console.log(keys.next().value); // 'world'

// get an iterator for the Set's values
const values = mySet.values();
console.log(values.next().value); // 'hello'
console.log(values.next().value); // 'world'

배열의 중복 제거

const myArray = [1, 2, 3, 1, 2, 4, 5, 4];
const uniqueArray = [...new Set(myArray)];

console.log(uniqueArray); // [1, 2, 3, 4, 5]

WeakSet

Set과 비슷하지만 weakSet의 경우 객체만 포함할 수 있다.

  • WeakSet은 객체만 포함할 수 있습니다(기본 값 아님).
  • WeakSet의 개체는 약한 상태로 유지됩니다. 즉, 개체에 대한 다른 강력한 참조가 없으면 가비지 수집될 수 있습니다.
  • Set 개체와 달리 WeakSet 개체는 반복할 수 없습니다. 즉 for...of 루프나 다른 반복 방법을 사용하여 WeakSet의 개체를 반복할 수 없습니다.
  • WeakSet 객체에는 size 속성이나 clear() 메서드가 없습니다. add() 메서드를 사용하여 WeakSet에 객체를 추가하거나 delete() 메서드를 사용하여 객체를 제거할 수만 있습니다.
const myWeakSet = new WeakSet();

const obj1 = {foo: 'bar'};
const obj2 = {baz: 'qux'};

myWeakSet.add(obj1);
myWeakSet.add(obj2);

console.log(myWeakSet.has(obj1)); // true
console.log(myWeakSet.has(obj2)); // true

myWeakSet.delete(obj2);

console.log(myWeakSet.has(obj1)); // true
console.log(myWeakSet.has(obj2)); // false

Map

맵은 Set과 유사하지만 키/값 쌍으로 이루어진다.

맵은 각 키가 고유해야 하는 키-값 쌍의 모음입니다.
맵의 키와 값은 개체 및 함수를 포함하여 모든 유형이 될 수 있습니다.
객체와 달리 맵은 반복 가능합니다. 즉, for...of 루프 또는 기타 반복 방법을 사용하여 맵의 키 또는 값을 반복할 수 있습니다.
맵에는 맵의 키-값 쌍 수를 반환하는 크기 속성이 있습니다.
set(), delete() 및 has()와 같은 메서드를 사용하여 Map에서 키-값 쌍을 추가, 제거 및 업데이트할 수 있습니다.

const myMap = new Map();

const key1 = 'foo';
const value1 = 'bar';
const key2 = {baz: 'qux'};
const value2 = function() { console.log('hello world'); };

myMap.set(key1, value1);
myMap.set(key2, value2);

console.log(myMap.has(key1)); // true
console.log(myMap.get(key1)); // 'bar'
console.log(myMap.has(key2)); // true
console.log(myMap.get(key2)); // [Function: value2]
console.log(myMap.size); // 2

myMap.delete(key1);

console.log(myMap.has(key1)); // false
console.log(myMap.size); // 1

for (const [key, value] of myMap) {
  console.log(key, value);
}
// Output:
// { baz: 'qux' } [Function: value2]

weakMap

WeakMap은 Map과 유사한 JavaScript의 내장 개체이지만 약한 참조 키-값 쌍을 저장할 수 있습니다.
WeakSet과 마찬가지로 WeakMap의 개체는 약하게 유지됩니다. 즉, 개체에 대한 다른 강력한 참조가 없으면 가비지 수집될 수 있습니다.

const myWeakMap = new WeakMap();

const key1 = {foo: 'bar'};
const value1 = 'hello world';
const key2 = {baz: 'qux'};
const value2 = function() { console.log('hello world'); };

myWeakMap.set(key1, value1);
myWeakMap.set(key2, value2);

console.log(myWeakMap.has(key1)); // true
console.log(myWeakMap.get(key1)); // 'hello world'
console.log(myWeakMap.has(key2)); // true
console.log(myWeakMap.get(key2)); // [Function: value2]

myWeakMap.delete(key1);

console.log(myWeakMap.has(key1)); // false
profile
의미 없는 코드는 없다.

0개의 댓글