정보실

웹학교

정보실

javascript JavaScript에서 Sets 및 Maps 탐색 (3)

본문

약점 (WeakSets) 


WeakSets은 집합 데이터 구조로 작업 할 때 추가 유연성을 제공합니다. 그것들은 객체만 받아들이고 반복 할 수 없다는 점에서 일반 세트와 다릅니다. 그것들은 반복 될 수 없으며 clear() 메소드가 없습니다. 그러면 어떻게 추가 유연성을 제공합니까? 우리는 조금 볼 것입니다.


WeakSet 생성자를 사용하여 WeakSet을 만들 수 있습니다.


let user1 = {name: 'user 1', email: 'user1@example.com'};
let user2 = {name: 'user 2', email: 'user2@example.com'};
let user3 = {name: 'user 3', email: 'user3@example.com'};

const users = new WeakSet([user1, user2, user3]);

위의 코드는 새로운 WeakSet 객체를 만들고 객체 이외의 항목을 추가하면 TypeError를 반환합니다.

users.add('user 4');

console.log(users); // TypeError: Invalid value used in weak set

WeakSet에는 clear() 메서드가 없으므로 개체를 null로 설정해야만 개체를 ​​삭제할 수 있습니다. 이것은 JavaScript 엔진의 가비지 수집 알고리즘이 null 객체에 할당 된 메모리를 자동으로 해제하여 WeakSet에서 삭제하기 때문에 작동합니다.


null로 설정된 WeakSets 객체는 프로그램이 여전히 실행되는 동안 가비지 수집되므로 특히 비동기 적으로 생성되는 대량의 데이터를 처리 할 때 메모리 소비를 줄이고 메모리 누수를 방지하기 때문에 훌륭합니다.


이 기능에는 메모리 관리의 세부 사항을 신경 쓰지 않고도 프로그래밍 문제에 대한 간단한 솔루션을 작성할 수 있는 기회가 있습니다.


Maps 


JavaScript Maps는 각 항목의 고유 키를 기반으로 항목을 효율적으로 저장하고 검색하도록 설계된 객체입니다. 맵은 키와 값이 모두 기본 값이나 객체 또는 둘 다일 수 있는 키-값 쌍을 저장합니다.


MDN 문서는 지도 개체를 다음과 같이 설명합니다.


Map 객체는 키-값 쌍을 보유하며 키의 원래 삽입 순서를 기억합니다. 모든 값 (객체 및 기본 값 모두)은 키 또는 값으로 사용될 수 있습니다. Map 객체는 요소를 삽입 순서대로 반복합니다. for ... of 루프는 각 반복에 대해 [키, 값] 배열을 반환합니다. 


Map 만들기 


세트와 유사하게 맵을 쉽게 만들 수 있습니다. map 생성자를 사용하여 map를 만들어 보겠습니다.

const users = new Map();

console.log(users); // Map {}

아이템 추가 


키-값 쌍은 set() 메소드를 사용하여 맵에 추가됩니다. 이 메소드는 두 번째 인수를 취합니다. 첫 번째는 키이고 두 번째는 키로 참조되는 값입니다.

users.set('John Doe', {
  email: 'johndoe@example.com',
});

users.set('Jane Doe', {
  email: 'janedoe@example.com',
});

console.log(users);

/__ console.log result 
Map {
  'John Doe' => { email: 'johndoe@example.com'},
  'Jane Doe' => { email: 'janedoe@example.com'} }
__/

중복 키를 삭제하는 세트와 달리 map는 해당 키에 첨부 된 값을 업데이트합니다.

users.set('John Doe', {
  email: 'johndoe477@example.com',
});

console.log(users);

/__ console.log result 
Map {
  'John Doe' => {email: 'johndoe477@example.com'},
  'Jane Doe' => { email: 'janedoe@example.com'} }
__/

위의 예를 실행하면 John Doe의 이메일이 깔끔하게 대체됩니다.





  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

페이지 정보

조회 3회 ]  작성일19-08-14 18:28

웹학교